.net 默认情况下,谁在等待任务?
我在使用.net 默认情况下,谁在等待任务?,.net,task,.net,Task,我在使用ContinueWith时遇到了任务的问题。在回调中,当第一个任务出现故障时,我没有观察/处理异常。我在这里发现了在这种情况下会发生什么: 记住,如果你自己的延续没有遵守 例外情况下,等待此总体工作流的人员 完成就是观察它的人 这让我想知道: 谁是未等待的任务的服务员? 默认情况下,谁在等待任务? 例如: public int HowOldAmI() { Task t = Task.Run(async () => { await Task.Dela
ContinueWith
时遇到了任务的问题。在回调中,当第一个任务出现故障时,我没有观察/处理异常。我在这里发现了在这种情况下会发生什么:
记住,如果你自己的延续没有遵守
例外情况下,等待此总体工作流的人员
完成就是观察它的人
这让我想知道:
谁是未等待的任务的服务员?
默认情况下,谁在等待任务
?
例如:
public int HowOldAmI()
{
Task t = Task.Run(async () => {
await Task.Delay(5000);
throw new Exception("Something happened");
});
return 42;
}
在这种情况下,谁在等待任务
?没有什么在等待没有任何东西在等待的任务。这就是为什么等待它们很重要的原因,否则所有这些异常都将被吞没,并且您可能不知道程序中存在逻辑错误。NET的早期版本有不同的逻辑,如果出现未观察到的异常,会导致进程崩溃
还有一个事件可以帮助处理未观察到的异常(例如,至少在某个地方记录这些异常):
另请参见此问题中的讨论:在您所展示的情况下,什么都不是。没有任何“隐式”等待任务完成-如果您选择创建任务而不等待它,任何异常都会转到未观察到的异常处理程序。好的,谢谢@JonSkeet。未观察到的异常处理程序是否有文档记录?我问的原因是我的崩溃报告库正在捕获这些异常,尽管没有真正的崩溃发生,所以我正在尝试正确处理异常,以便它们不会出现在我的崩溃报告中。请参阅Andrew的答案…好的,谢谢。因此,将调用UnobservedTaskeException处理程序,即使我使用t.ContinueWith((previousTask)=>{/*不观察异常的代码*/})继续我的第一个任务t
代码>?是的,没错。您需要访问任务的结果
或异常
属性,或等待其结果以观察异常。否则,它将传递到该事件。