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

本文关键字:WinForms AggregateException 是什么 | 更新日期: 2023-09-27 18:33:51

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

两个问题:

  1. 有没有更好的方法可以做到这一点?(我讨厌"将调用包装在尝试/捕获/重新throw并在重新throw技术上放置断点)。
  2. 以为Task对象本身被垃圾回收时,AggregateException被抛出。这是真的吗?
  3. 根据#2的答案:为什么调整大小会更立即触发AggregateException

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

有没有更好的方法可以做到这一点?

可以使用 Result 属性或 Wait() 函数。两者都阻止,如果Task失败,他们会抛出AggregateException.如果您想对异常执行某些操作,另一种选择是将ContinueWith()TaskContinuationOptions.OnlyOnFaulted 一起使用

我认为当任务对象本身被垃圾回收时,聚合异常被抛出。这是真的吗?

是的,如果未以任何方式访问TaskException,则在 .Net 4.0 上完成时将引发异常。(.Net 4.5 更改了在Task最终确定时不再引发Task的未经处理的异常。

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

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