我以为我已经了解了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
),就会抛出异常。
我哪里错了?
当任何
返回一个从不失败的任务时。 该任务的结果就是完成的任务。
var completedTask = await Task.WhenAny(persistenceTask, monitorsTask);