Heute haben meine Kollegen und ich besprochen, wie Exceptions in C# 5.0 async
Methoden korrekt behandelt werden, und wir haben uns gefragt, ob das Warten auf mehrere Tasks gleichzeitig auch die Exceptions berücksichtigt, die von der Runtime nicht ausgepackt werden.Werden mehrere Aufgaben warten mehr als die erste Ausnahme beachten?
Betrachten Sie den folgenden Code-Schnipsel:
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)
}
}
Was jetzt auf die zweite Aufgabe geschieht? Beide werden in einem fehlerhaften Zustand sein, aber ist die zweite Aufgabe nun eine Ausnahme oder unbeobachtet?
Beide werden beobachtet. –
Das Buch C# in der Tiefe diskutiert dieses Problem, Sie können die Antwort dort finden. – Matt