AsParallel()Когда задачи выполняются параллельно и часть из них падает с ошибкой, .NET не бросает одно исключение. Вместо этого все ошибки собираются в
AggregateException. Если не обработать его правильно, приложение просто упадёт, а вы потеряете детали о каждой конкретной ошибке.AggregateException содержит коллекцию InnerExceptions, где хранится каждое исключение из параллельного потока. Перебирая их в catch, мы получаем полный список того, что пошло не так, и можем реагировать на каждый случай отдельно.Вот как это выглядит:
try
{
var results = items
.AsParallel()
.Select(item =>
{
if (item == null)
throw new InvalidOperationException("Item is null");
return ProcessItem(item);
})
.ToList();
}
catch (AggregateException ae)
{
foreach (var ex in ae.InnerExceptions)
{
Console.WriteLine($"Handled: {ex.Message}");
}
}
Если в
items окажется null, код не упадёт молча. Каждая ошибка будет поймана и выведена отдельно.Используйте этот подход всегда, когда логика внутри
AsParallel() может выбросить исключение. Это особенно актуально при работе с внешними данными, файлами или сетевыми вызовами, где ошибки непредсказуемы.📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view