Как реализовать пользовательскую задачу. Когда он сохраняет порядок исключений?C#

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

Сообщение Anonymous »

Поведение необщего Task.WhenAll изменилось в .NET 8, и теперь порядок исключений находится в хронологическом порядке, а не в позиционном. Новое поведение не лишено достоинств, но у меня есть несколько тестов, которые требуют прохождения старого поведения Task.WhenAll. Поэтому вместо того, чтобы менять свои тесты, я бы предпочел использовать метод, аналогичный Task.WhenAll, который распространяет исключения в том же порядке, в котором ошибочные задачи расположены в массиве задач. Я спрашиваю здесь, как реализовать этот метод. Подпись метода:

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

/// 
/// 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);
< /code>
Вот простая программа, которая демонстрирует желаемое поведение этого метода: < /p>
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)
Нежелательный вывод:

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

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 МБ.

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