Как реализовать собственный Task.WhenAll, сохраняющий порядок исключений?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать собственный Task.WhenAll, сохраняющий порядок исключений?

Сообщение Anonymous »

Поведение негенерической задачи. ВОЗНАЯ Изменено в .NET 8, и теперь порядок исключений находится в хронологическом порядке вместо позиционного порядка. Новое поведение не без заслуг, но у меня есть некоторые тесты, которые требуют старого задания. Ведол поведение для прохождения. Таким образом, вместо того, чтобы менять свои тесты, я бы предпочел использовать метод, аналогичный задаче. ВОЗНА , который распространяет исключения в том же порядке, что и ошибки в массиве задач . Я спрашиваю здесь, как реализовать этот метод. Подпись метода: < /p>

Код: Выделить всё

/// 
/// Creates a task that will complete when all of the supplied tasks have completed.
/// This task contains the exceptions of the faulted tasks in their positional order
/// (not chronological order).
/// 
public static Task WhenAll_OrderedExceptions(params Task[] tasks);
Вот простая программа, демонстрирующая желательное поведение этого метода:

Код: Выделить всё

async Task DoAsync(string title, int delay)
{
await Task.Delay(delay);
throw new Exception(title);
}

Task t1 = DoAsync("A", 200);
Task t2 = DoAsync("B", 100);

try
{
WhenAll_OrderedExceptions(t1, t2).Wait();
}
catch (AggregateException aex)
{
Console.Write($"Error message: {aex.Message}");
}
< /code>
Желательный вывод: < /p>
Error message: One or more errors occurred. (A) (B)
< /code>
Нежелательный вывод: < /p>
Error message: One or more errors occurred. (B) (A)
Программа на скрипке .net.>

Подробнее здесь: https://stackoverflow.com/questions/793 ... exceptions
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • HashSet, сохраняющий порядок
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Почему вызов неоднозначен между Task.Run(Func) и Task.Run(Func) при передаче имени метода
    Anonymous » » в форуме C#
    0 Ответы
    103 Просмотры
    Последнее сообщение Anonymous
  • Лучший способ распараллелить задачи .NET с помощью Task.WhenAll
    Anonymous » » в форуме C#
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous
  • Используйте Task.WhenAll в уже работающем методе.
    Anonymous » » в форуме C#
    0 Ответы
    115 Просмотры
    Последнее сообщение Anonymous
  • Task.WhenAll против Parallel.ForEachAsync – какой подход лучше и почему?
    Anonymous » » в форуме C#
    0 Ответы
    53 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»