Dlaczego nie czeka na Task.WhenWszystko rzuca wyjątek AggregateException?
W tym kodzie:
private async void button1_Click(object sender, EventArgs e) {
try {
await Task.WhenAll(DoLongThingAsyncEx1(), DoLongThingAsyncEx2());
}
catch (Exception ex) {
// Expect AggregateException, but got InvalidTimeZoneException
}
}
Task DoLongThingAsyncEx1() {
return Task.Run(() => { throw new InvalidTimeZoneException(); });
}
Task DoLongThingAsyncEx2() {
return Task.Run(() => { throw new InvalidOperation();});
}
oczekiwałemWhenAll
tworzyć i rzucaćAggregateException
, ponieważ przynajmniej jedno z zadań, na które czekało, rzuciło wyjątek. Zamiast tego otrzymuję pojedynczy wyjątek rzucony przez jedno z zadań.
RobiWhenAll
nie zawsze tworząAggregateException
?