此刻我有这种奇怪的情况。我有一个Task
我正在抛出异常。 TaskScheduler.UnobservedTaskException
事件触发但UnobservedException
永远不会重新抛出(即使使用ThrowUnobservedTaskExceptions enabled="true"
)。当我检入调试器时,我看到Task
看起来像这样:
这对我来说似乎很可疑。它如何拥有RanToCompletition
但又有Faulted
Result
?结果中的异常是我正在抛出的异常,但它没有进入Task.Exception
属性。
答案 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
。