为什么等待这个错误的任务不会引发异常?

时间:2020-06-11 14:01:39

标签: c# .net async-await task-parallel-library

考虑我会着手解决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)上抛出{em> 。

我怎么了?

1 个答案:

答案 0 :(得分:4)

WhenAny返回一个永不失败的任务。该任务的结果是已完成的任务。

var completedTask = await Task.WhenAny(persistenceTask, monitorsTask);