谁在等待默认任务?

时间:2016-08-22 11:03:03

标签: .net task

我使用Task的{​​{1}}遇到了麻烦。在回调中,当第一个任务出现故障时,我没有观察/处理ContinueWith。我发现在这种情况下会发生什么:
Proper way to use .ContinueWith for Tasks

  

请记住,如果你自己的继续不遵守   例外,正在等待整个工作流程的人   完成将是观察它的人。

这让我想知道:
谁是未等待Exception的服务员?
默认情况下谁在等待Task

例如:

Task

在这种情况下,正在等待public int HowOldAmI() { Task t = Task.Run(async () => { await Task.Delay(5000); throw new Exception("Something happened"); }); return 42; }

1 个答案:

答案 0 :(得分:2)

没有什么是等待任何事情都没有等待的任务。这就是为什么等待它们很重要的原因,否则所有这些异常都会被吞噬,你可能不知道程序中存在逻辑错误。早期版本的.NET具有不同的逻辑,并导致进程在未观察到的异常情况下崩溃。

还有一个事件可以帮助解决未观察到的异常(例如,至少要将它们记录在某处):TaskScheduler.UnobservedTaskException

另见此问题中的讨论:Unobserved Task exceptions in .NET 4.5 still crash app