什么触发最终在WinForms中抛出AggregateException?

时间:2012-05-09 17:42:01

标签: c# winforms task-parallel-library

当我怀疑Task的{​​{1}}失败时,我常常只是等待Action最终被抛出,所以我可以挖掘AggregateException。然而,最近我注意到,通过尝试调整已启动失败InnerException的表单,我可以强制显示错误。

两个问题:

  1. 有更好的方法吗? (我讨厌“试一试/抓住/重新召唤 - Task并在重新throw技术上设置一个断点。”
  2. 当<{1}}对象本身被垃圾收集时,我认为 throw被抛出。这是真的吗?
  3. 根据#2的答案:为什么调整大小会立即触发AggregateException

1 个答案:

答案 0 :(得分:1)

  

有更好的方法吗?

您可以使用Result属性或Wait()功能。两者都阻止,如果Task失败,他们会抛出AggregateException。如果您想对例外做一些事情,另一个选择是ContinueWith()TaskContinuationOptions.OnlyOnFaulted一起使用。

  

我认为当Task对象本身被垃圾收集时抛出了AggregateException。这是真的吗?

是的,如果未以任何方式访问Exception的{​​{1}},它将在.Net 4.0上最终确定时抛出异常。 (.Net 4.5更改,Task最终确定后,Task的未处理异常不再抛出。)

  

根据#2的回答:为什么调整大小会立即触发Task

最有可能的原因是它会创建一些对象,导致垃圾收集运行。