1

当我怀疑 aTask失败时Action,我过去常常只是坐着等待AggregateException最终被抛出,这样我就可以深入研究InnerException. 然而,最近,我注意到通过尝试调整导致失败的表单的大小,Task我可以强制错误明显抛出。

两个问题:

  1. 有一个更好的方法吗?(我讨厌“将调用包装在 try/catch/re- 中并在 re-技术上throw放置一个断点)。throw
  2. 认为当对象本身被垃圾收集时会AggregateException被抛出。Task真的吗?
  3. 根据 #2 的答案:为什么调整大小会AggregateException更立即触发?
4

1 回答 1

2

有一个更好的方法吗?

您可以使用Result属性或Wait()函数。两者都阻塞,如果Task失败,它们会抛出AggregateException. 另一种选择,如果你想对异常做一些事情,是使用ContinueWith()with TaskContinuationOptions.OnlyOnFaulted

我认为当 Task 对象本身被垃圾收集时,会引发 AggregateException。真的吗?

是的,如果ExceptionTask以任何方式访问 ,它将在 .Net 4.0 上完成时抛出异常。(.Net 4.5 改变了这一点,Task当 s 最终确定时,来自 s 的未处理异常不再抛出Task。)

根据 #2 的答案:为什么调整大小会AggregateException更立即触发?

很可能是因为它创建了一些对象,从而导致垃圾收集运行。

于 2012-05-09T17:58:24.997 回答