Почему ожидание для Task.WhenAll не вызывает исключение AggregateException?

В этом коде:

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();});
}

Я ожидал, что WhenAllсоздаст и сгенерирует AggregateException, так как по крайней мере одна из ожидавшихся задач вызвала исключение. Вместо этого я получаю одно исключение, вызванное одной из задач.

Разве WhenAllне всегда создает AggregateException?

83
задан Govert 7 September 2016 в 11:28
поделиться