Код: Выделить всё
foreach (var msg in messages)
{
await smtp.SendAsync(msg);
}
Думайте об этом как о .WhenAll(), которая выполняет все задачи и выдает AggregateException в конце, если какая-либо из задач завершается сбоем. Однако я не могу найти никакой последовательной альтернативы.
Я изучил документацию, погуглил и переполнил стек в поисках решения и не нашел встроенного способа сделать это. . Я думаю, единственный способ — обрабатывать исключения вручную.
Что-то вроде этого
Код: Выделить всё
var exceptions = new List();
foreach (var msg in messages)
{
try
{
await smtp.SendAsync(msg).ConfigureAwait(false);
}
catch (Exception ex)
{
exceptions.Add(ex);
}
}
if (exceptions.Count > 0)
{
throw new AggregateException(exceptions);
}
- Есть ли встроенное решение .NET, которого мне не хватает?
- Если нет, то правильный ли это путь? Может быть, лучше объединить несколько вызовов .ContinueWith и вместо этого вернуть полученную «цепочку-задачу»? (таким образом исключая await/async и предотвращая ненужное построение конечного автомата)
Разрешено ли мне использовать здесь встроенное исключение AggregateException .NET или это плохая практика?
Подробнее здесь: https://stackoverflow.com/questions/742 ... -exception
Мобильная версия