¿La espera de múltiples tareas observará más que la primera excepción?
Hoy mis colegas y yo discutimos cómo manejar las excepciones en C # 5.0async
métodos correctamente, y nos preguntamos si esperar múltiples tareas a la vez también observa las excepciones que el tiempo de ejecución no desenvuelve.
Considere el siguiente fragmento 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)
}
}
¿Qué pasa con la segunda tarea ahora? Ambos estarán en estado de falla, pero ¿la excepción de la segunda tarea ahora se observa o no se observa?