Wie implementiert man eine benutzerdefinierte Task.WhenAll, die die Reihenfolge der Ausnahmen beibehält?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie implementiert man eine benutzerdefinierte Task.WhenAll, die die Reihenfolge der Ausnahmen beibehält?

Post by Guest »

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>

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);
Hier ist ein einfaches Programm, das das gewünschte Verhalten dieser Methode demonstriert:

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}");
}
Gewünschte Ausgabe:

Code: Select all

Error message: One or more errors occurred. (A) (B)
Unerwünschte Ausgabe:

Code: Select all

Error message: One or more errors occurred. (B) (A)
Das Programm auf .NET Fiddle.
Hat jemand eine Idee, wie diese Methode implementiert wird?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post