A espera de várias tarefas observará mais do que a primeira exceção?
Hoje, meus colegas e eu discutimos como lidar com exceções no C # 5.0async
métodos corretamente, e nos perguntamos se aguardar várias tarefas ao mesmo tempo também observa as exceções que não são desembrulhadas pelo tempo de execução.
Considere o seguinte snippet de código:
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)
}
}
O que acontece com a segunda tarefa agora? Ambos estarão em um estado defeituoso, mas a exceção da segunda tarefa agora é observada ou não observada?