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

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

Сообщение 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);
< /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}");
}
Желаемый результат:

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

Error message: One or more errors occurred. (A) (B)
< /code>
Нежелательный вывод: < /p>
Error message: One or more errors occurred. (B) (A)
Программа на .NET Fiddle.
Есть ли у кого-нибудь идеи о том, как реализовать этот метод?

Подробнее здесь: https://stackoverflow.com/questions/793 ... exceptions
Ответить

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

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

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

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

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