首页 > 其他 > 详细

Task异常处理的坑

时间:2020-06-21 23:42:36      阅读:96      评论:0      收藏:0      [点我收藏+]

全局异常

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异常处理看官网文档就行了

Task异常处理的坑

原文:https://www.cnblogs.com/jionsoft/p/13174589.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!