第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Lambda 遇到 UnobservedTaskException - 無法訪問已處置的對象

Lambda 遇到 UnobservedTaskException - 無法訪問已處置的對象

C#
函數(shù)式編程 2022-01-09 16:43:43
我一直在 AWS Lambda 的 CloudWatch 日志中注意到此異常。一切似乎都得到了處理,所以我認為這是在 Lambda 完成執(zhí)行后創(chuàng)建的 AWS 代碼中的異常(與我編寫的代碼相反)。由于在功能上它有效,我一直忽略它,但我擔心可能存在我沒有注意到的問題。Lambda 通過 'TaskScheduler.UnobservedTaskException' 事件遇到了 UnobservedTaskException:{    "errorType": "AggregateException",    "errorMessage": "A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread. (Cannot access a disposed object.\nObject name: 'System.Net.Sockets.UdpClient'.)",    "cause": {        "errorType": "ObjectDisposedException",        "errorMessage": "Cannot access a disposed object.\nObject name: 'System.Net.Sockets.UdpClient'.",        "stackTrace": [            "at System.Net.Sockets.UdpClient.EndReceive(IAsyncResult asyncResult, IPEndPoint& remoteEP)",            "at System.Net.Sockets.UdpClient.<>c.<ReceiveAsync>b__56_1(IAsyncResult asyncResult)",            "at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)"        ]    },    "causes": [ {        "errorType": "ObjectDisposedException",        "errorMessage": "Cannot access a disposed object.\nObject name: 'System.Net.Sockets.UdpClient'.",        "stackTrace": [            "at System.Net.Sockets.UdpClient.EndReceive(IAsyncResult asyncResult, IPEndPoint& remoteEP)",            "at System.Net.Sockets.UdpClient.<>c.<ReceiveAsync>b__56_1(IAsyncResult asyncResult)",            "at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)"        ]    }]}
查看完整描述

2 回答

?
不負相思意

TA貢獻1777條經(jīng)驗 獲得超10個贊

日志消息很簡單,并解釋了正在發(fā)生的事情:

  • 你有一個異步任務

  • 該異步任務正在訪問一個已經(jīng)被釋放的對象,可能是因為您的工作流中有一些競爭條件,異步工作流中的一個對象與需要它的工作流的另一部分無序釋放。 這意味著這個工作流程中的某些東西被嚴重破壞了。

  • 異步任務從不等待,要么與 await 異步,要么(不要這樣做?。┡c Result 或 Wait 同步。這意味著永遠不會采用異常延續(xù)路徑,并且任務在收集它時會注意到這一點。同樣,如果您有一項從不等待結(jié)果的任務,那么您的工作流程中可能會出現(xiàn)嚴重問題。將這一事實與前一點的事實相結(jié)合:我們現(xiàn)在有兩個證據(jù)相互支持,表明此工作流程中存在嚴重問題,并且它涉及一個未等待的任務,而該任務本應確保排序約束.

  • 因此,您在終結(jié)器線程上遇到異常,這真的很糟糕。

由于它在功能上有效,我一直忽略它

我曾經(jīng)聽說,當一家工廠著火并被燒毀時,平均有七種不同的安全系統(tǒng)被人們忽視或禁用。擺脫這種認為它有效的習慣,所以它必須是安全的。也許沒什么,但我會認為這些消息表明存在嚴重問題,直到我有其他證據(jù)。


查看完整回答
反對 回復 2022-01-09
?
元芳怎么了

TA貢獻1798條經(jīng)驗 獲得超7個贊

我也遇到了一個有 3rd 方庫導致錯誤的地方。我想在 CloudWatch 之外記錄它。為了防止 Lambda 記錄這些,我能夠做一些邪惡的反射來重置事件處理程序。


這是您自己執(zhí)行此操作的代碼。請注意這是邪惡的代碼。它很脆弱,并且會在 CLR 中的代碼更改或即使編譯器進行優(yōu)化(最近發(fā)生的)時中斷。但是,這是我能找到退出 Lambda 提供的此功能的唯一方法


private void ReplaceLambdaDefaultUnobservedTaskException()

{

    try

    {

        var bindingFlags = BindingFlags.NonPublic | BindingFlags.Static;

        Type type = typeof(TaskScheduler);


        var field = type.GetField("_unobservedTaskException", bindingFlags);


        if (field == null)

        {

            field = type.GetField("UnobservedTaskException", bindingFlags);

        }


        var handler = new EventHandler<UnobservedTaskExceptionEventArgs>(TaskSchedulerOnUnobservedTaskException);

        field.SetValue(null, handler);

    }

    catch (Exception ex)

    {

        logger.Warning(ex, "Unable to do evil reflection.");

    }


    TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;

}


private void TaskSchedulerOnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)

{

    e.SetObserved();

    logger.Error(e.Exception, "Lambda threw an UnobservedTaskException");

}


查看完整回答
反對 回復 2022-01-09
  • 2 回答
  • 0 關(guān)注
  • 318 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號