Что выведет код 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 ошибок.