今天我的同事和我讨论了如何正确处理C#5.0 async方法中的异常,我们想知道是否同时等待多个任务也会观察到运行时未解包的异常.
请考虑以下代码段:
async Task ExceptionMethodAsync()
{
await Task.Yield();
throw new Exception();
}
async Task CallingMethod()
{
try
{
var a = ExceptionMethodAsync();
var b = ExceptionMethodAsync();
await Task.WhenAll(a, b);
}
catch(Exception ex)
{
// Catches the "first" exception thrown (whatever "first" means)
}
}
Run Code Online (Sandbox Code Playgroud)
现在第二项任务会发生什么?两者都将处于故障状态,但是现在观察到还是未观察到的第二个任务异常?