Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 默认情况下,谁在等待任务?_.net_Task - Fatal编程技术网

.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
?是的,没错。您需要访问任务的
结果
异常
属性,或等待其结果以观察异常。否则,它将传递到该事件。