我使用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;
}
?
答案 0 :(得分:2)
没有什么是等待任何事情都没有等待的任务。这就是为什么等待它们很重要的原因,否则所有这些异常都会被吞噬,你可能不知道程序中存在逻辑错误。早期版本的.NET具有不同的逻辑,并导致进程在未观察到的异常情况下崩溃。
还有一个事件可以帮助解决未观察到的异常(例如,至少要将它们记录在某处):TaskScheduler.UnobservedTaskException。
另见此问题中的讨论:Unobserved Task exceptions in .NET 4.5 still crash app