Middle+
La logica dei blocchi catch per la compensazione funzionerà correttamente quando si utilizza await Task.WhenAll? Quale eccezione verrà sollevata?
sobes.tech AI
Risposta dell'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.