是什么触发了最终在WinForms中抛出AggregateException
本文关键字:WinForms AggregateException 是什么 | 更新日期: 2023-09-27 18:33:51
当我怀疑Task
的Action
失败时,我过去只是坐着等待AggregateException
最终被抛出,这样我就可以深入研究InnerException
。然而,最近,我注意到,通过尝试调整启动失败Task
的表单的大小,我可以强制错误明显抛出。
两个问题:
- 有没有更好的方法可以做到这一点?(我讨厌"将调用包装在尝试/捕获/重新
throw
并在重新throw
技术上放置断点)。 - 我以为当
Task
对象本身被垃圾回收时,AggregateException
被抛出。这是真的吗? - 根据#2的答案:为什么调整大小会更立即触发
AggregateException
?
有没有更好的方法可以做到这一点?
可以使用 Result
属性或 Wait()
函数。两者都阻止,如果Task
失败,他们会抛出AggregateException
.如果您想对异常执行某些操作,另一种选择是将ContinueWith()
与 TaskContinuationOptions.OnlyOnFaulted
一起使用
我认为当任务对象本身被垃圾回收时,聚合异常被抛出。这是真的吗?
是的,如果未以任何方式访问Task
的Exception
,则在 .Net 4.0 上完成时将引发异常。(.Net 4.5 更改了在Task
最终确定时不再引发Task
的未经处理的异常。
根据#2的答案:为什么调整大小会更立即触发
AggregateException
?
很可能是因为它创建了一些对象,从而导致垃圾回收运行。