怎么可能有一个RanToCompletion的任务但是Result.Status是Faulted?

时间:2013-12-02 01:28:01

标签: task-parallel-library async-await

此刻我有这种奇怪的情况。我有一个Task我正在抛出异常。 TaskScheduler.UnobservedTaskException事件触发但UnobservedException永远不会重新抛出(即使使用ThrowUnobservedTaskExceptions enabled="true")。当我检入调试器时,我看到Task看起来像这样:

RanToCompletion but also Status Faulted

这对我来说似乎很可疑。它如何拥有RanToCompletition但又有Faulted Result?结果中的异常是我正在抛出的异常,但它没有进入Task.Exception属性。

1 个答案:

答案 0 :(得分:4)

这看起来像是Task<Task>。外部Task已完成,其Result是另一个Task,这次出现故障。

这正是调试器显示的内容:“结果”行不是包含整个对象摘要的特殊行,它是the Result property

如果没有看到您的代码,很难说Task<Task>是如何创建的。但是,如果您使用async运行Task.Factory.StartNew()方法,则C#5.0中相对常见的情况就是如此。如果是这种情况,您应该直接调用async方法,或者,如果要在后台线程上运行它,请使用Task.Run(),这会自动将Task<Task>解包为简单的Task