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