Что выведет код Senior async/await и Task обновлено

Исключения из Task.WhenAll

Вопрос

Что выведет программа (.NET 8)? По строке на каждый вывод.

var t1 = Fail("first");
var t2 = Fail("second");
var all = Task.WhenAll(t1, t2);
try
{
    await all;
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().Name + " " + e.Message);
    Console.WriteLine(all.Exception.InnerExceptions.Count);
}

static async Task Fail(string m)
{
    await Task.Yield();
    throw new InvalidOperationException(m);
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: InvalidOperationException first, 2. await у задачи WhenAll пробрасывает только первое исключение из её AggregateException, причём сам объект исключения, а не обёртку: InvalidOperationException first.

Что выведет

InvalidOperationException first
2

Разбор

await у задачи WhenAll пробрасывает только первое исключение из её AggregateException, причём сам объект исключения, а не обёртку: InvalidOperationException first. Все ошибки остаются в all.Exception.InnerExceptions, их две.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме