Wie implementiert man eine benutzerdefinierte Task.WhenAll, die die Reihenfolge der Ausnahmen beibehält?
Posted: 27 Jan 2025, 04:30
Das Verhalten der nicht generischen Aufgabe.Wenall in .NET 8 geändert, und jetzt befindet sich die Reihenfolge der Ausnahmen in chronologischer Reihenfolge anstelle von Positionsreihenfolge. Das neue Verhalten ist nicht ohne Verdienste, aber ich habe einige Tests, die die alte Aufgabe erfordern. Whenall Verhalten zum Durchgeben. Anstatt meine Tests zu ändern, würde ich es vorziehen, eine ähnliche Methode wie die Aufgabe zu verwenden. Whenall , die die Ausnahmen in derselben Reihenfolge ausbreitet, dass die fehlerhaften Aufgaben in den Aufgaben -Array positioniert sind. Ich frage hier, wie ich diese Methode implementieren kann. Die Signatur der Methode: < /p>
Hier ist ein einfaches Programm, das das gewünschte Verhalten dieser Methode demonstriert:
Gewünschte Ausgabe:
Unerwünschte Ausgabe:
Das Programm auf .NET Fiddle.
Hat jemand eine Idee, wie diese Methode implementiert wird?>
Code: Select all
///
/// 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: Select all
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: Select all
Error message: One or more errors occurred. (A) (B)
Code: Select all
Error message: One or more errors occurred. (B) (A)
Hat jemand eine Idee, wie diese Methode implementiert wird?>