我考虑我会着手解决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> 。
我怎么了?
答案 0 :(得分:4)
WhenAny
返回一个永不失败的任务。该任务的结果是已完成的任务。
var completedTask = await Task.WhenAny(persistenceTask, monitorsTask);