Task異常處理的坑


全局異常

TaskScheduler.UnobservedTaskException += (e, args) =>{
  MessageBox.Show("dddddddddddddddd");
};

即便有個Task發生了未處理的異常,也不會立即觸發這個事件,而是那個Task必須被GC回收時才會觸發,如果那兒task一直被引用,那么它一直無法觸發

所以我們可以手動調用GC.Collect();,但這樣也不一定行

經過測試,.net 4.0中程序必須是release模式才有效,而.net 4.5 debug或release都行

完整測試代碼如下:

TaskScheduler.UnobservedTaskException += (eeee, args) =>
{
    MessageBox.Show("sssssssssssss");
};

Task.Run(() => {
     throw new Exception("aa");
});

Thread.Sleep(2000);
GC.Collect();

發生未處理異常時阻止程序退出

vs2019 .net 4.0中、4.5測試發生未處理task異常時 並不會像未處理線程異常那樣程序退出,可以在配置中做如下配置:

<runtime>
    <ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>

這樣發生未處理的task異常后 程序會退出。

無論如何,TaskScheduler.UnobservedTaskException事件還是會觸發,但是前提條件上面已經講過了

剩下的task異常處理看官網文檔就行了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM