提问者:小点点

为什么等待这个有错误的任务不抛出异常?


我以为我已经了解了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 thow but it doesn't
    }

    //in a calling method later
    var t = await RunAsync();

CompletedTask状态为faulted时,我可以在调试器中看到内部异常,但T以成功完成结束。 我想要的是runasync抛出的异常--我知道当任何在任务出错时不会抛出,但我认为如果我对出错的任务await(completedtask)执行await),就会抛出异常。

我哪里错了?


共1个答案

匿名用户

当任何返回一个从不失败的任务时。 该任务的结果就是完成的任务。

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