【问题标题】:What triggers finally throwing an AggregateException in WinForms?什么触发最终在 WinForms 中抛出 AggregateException?
【发布时间】:2012-11-14 16:24:49
【问题描述】:

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

两个问题:

  1. 有没有更好的方法来做到这一点? (我讨厌“将调用包装在 try/catch/re-throw 中并在 re-throw 技术上设置断点)。
  2. 认为AggregateExceptionTask 对象本身被垃圾回收时被抛出。这是真的吗?
  3. 根据第 2 条的答案:为什么调整大小会更立即触发 AggregateException

【问题讨论】:

    标签: c# winforms task-parallel-library


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2016-08-01
      相关资源
      最近更新 更多