C#任务 - 为什么在这种情况下需要noop线

时间:2015-05-15 16:56:08

标签: c# .net task-parallel-library

我正在阅读Interactive Extensions的源代码,并找到了一个我无法理解的line

IsFaulted

我也没有在Exceptionvar ignored = t.Exception; // don't remove!属性的文档中看到任何相关评论。

为什么在此上下文中需要此行platforms/ios/*.xcodeproj/project.pbxproj

一个相关的问题:我认为在发布模式下这些行已经被优化了,但是这里的评论和意图并非如此(如果代码是正确的话)。那么为什么这条线保持在发布模式?

1 个答案:

答案 0 :(得分:7)

该行是观察到的异常与未观察到的异常之间的区别。

在.Net 4.0中,具有未观察到的异常的任务将抛出UnobservedTaskException并拆除整个应用程序:

  

“如果您不等待传播异常的任务或访问其Exception属性,则在对任务进行垃圾回收时,将根据.NET异常策略升级异常。”

来自Exception Handling (Task Parallel Library)

在.Net 4.5中使用async-await进行了更改,但您可以使用app.config(<ThrowUnobservedTaskExceptions enabled="true"/>)恢复旧行为。

还有一个事件(TaskScheduler.UnobservedTaskException)允许您在应用程序崩溃之前处理此类错误任务。该活动仍在.Net 4.5及以上版本中提出。