Sobes.tech
Middle+

Ar teisingai veiks catch-blokų logika kompensacijai naudojant await Task.WhenAll? Kokia išimtis bus išmesta?

sobes.tech AI

Atsakymas iš AI

При использовании await Task.WhenAll(...) если один или несколько тасков завершаются с исключением, то в блоке catch будет выброшено исключение типа AggregateException. Это исключение содержит все исключения, возникшие в отдельных тасках.

Логика catch-блоков работает корректно, но важно помнить, что нужно обрабатывать именно AggregateException, чтобы получить доступ ко всем внутренним ошибкам.

Пример обработки:

try
{
    await Task.WhenAll(tasks);
}
catch (AggregateException ex)
{
    foreach (var inner in ex.InnerExceptions)
    {
        Console.WriteLine(inner.Message);
    }
}

В .NET Core и новее при использовании await AggregateException разворачивается автоматически, и можно ловить конкретные исключения напрямую, но если ловить Exception, то можно получить AggregateException.