全局異常
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異常處理看官網文檔就行了