我正在阅读Interactive Extensions的源代码,并找到了一个我无法理解的line:
IsFaulted
我也没有在Exception
或var ignored = t.Exception; // don't remove!
属性的文档中看到任何相关评论。
为什么在此上下文中需要此行platforms/ios/*.xcodeproj/project.pbxproj
?
一个相关的问题:我认为在发布模式下这些行已经被优化了,但是这里的评论和意图并非如此(如果代码是正确的话)。那么为什么这条线保持在发布模式?
答案 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及以上版本中提出。