为什么等待这个错误任务不抛出异常?
Why is awaiting on this faulted task not throwing the exception?
我 认为 我已经了解 async
方法中的异常,以及 WhenAll
/WhenAny
任务抛出异常时的行为, 但是:
internal async Task RunAsync()
{
//...
//one of persistenceTask, monitorsTask is going to throw an exeption
var completedTask = Task.WhenAny(persistenceTask, monitorsTask);
await completedTask; //I expect this to throw but it doesn't
}
.
//in a calling method later
var t = await RunAsync();
当 completedTask
状态为错误时,我可以在调试器中看到内部异常,但 t
最终显示为成功完成。我 想要 是 RunAsync
抛出的异常 - 我知道 WhenAny
在任务出错时 不会 抛出,但我认为如果我 await
执行错误任务 (completedTask
),此 将 抛出。
我哪里错了?
WhenAny
returns 一项永不失败的任务。该任务的结果是已完成的任务。
var completedTask = await Task.WhenAny(persistenceTask, monitorsTask);
我 认为 我已经了解 async
方法中的异常,以及 WhenAll
/WhenAny
任务抛出异常时的行为, 但是:
internal async Task RunAsync()
{
//...
//one of persistenceTask, monitorsTask is going to throw an exeption
var completedTask = Task.WhenAny(persistenceTask, monitorsTask);
await completedTask; //I expect this to throw but it doesn't
}
.
//in a calling method later
var t = await RunAsync();
当 completedTask
状态为错误时,我可以在调试器中看到内部异常,但 t
最终显示为成功完成。我 想要 是 RunAsync
抛出的异常 - 我知道 WhenAny
在任务出错时 不会 抛出,但我认为如果我 await
执行错误任务 (completedTask
),此 将 抛出。
我哪里错了?
WhenAny
returns 一项永不失败的任务。该任务的结果是已完成的任务。
var completedTask = await Task.WhenAny(persistenceTask, monitorsTask);