现在的位置: 首页 > 综合 > 正文

.NET 4.5(C#):关于Task的未觉察异常的更新

2012年11月24日 ⁄ 综合 ⁄ 共 662字 ⁄ 字号 评论关闭

曾经写过一篇文章:

.NET(C#) TPL:Task中未觉察异常和TaskScheduler.UnobservedTaskException事件

 

讲述在.NET 4.0中,Task的未觉察状态的异常会在垃圾回收时终结器执行线程中被抛出,像其他未处理异常一样,这个异常会使整个进程崩溃。而在.NET Framework 4.5 beta后,这个有所改变,这个未觉察的异常不会引发进程崩溃。

 

所以下面在.NET Framework 4.0中会发生异常的代码在.NET Framework 4.5 beta中不会发生异常。

//在Task中抛出异常

Task.Factory.StartNew(() =>

{

    throw new Exception();

});

 

//确保任务完成

Thread.Sleep(100);

//强制垃圾会受到

GC.Collect();

//等待终结器处理

GC.WaitForPendingFinalizers();

 

 

当然如果想在.NET Framework 4.5 beta中维持.NET Framework 4.0的做法,可以在应用程序配置文件中把运行时刻的ThrowUnobservedTaskExceptions设置成True(默认当然是False)就可以了。

<configuration>

    <runtime>

        <ThrowUnobservedTaskExceptions enabled="true"/>

    </runtime>

</configuration>

 

 

在运行上面的代码,异常会再次被抛出并引发进程崩溃。

 

:D

【上篇】
【下篇】

抱歉!评论已关闭.