Wie kann ich die erste Ausnahme richtig abbrechen.C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie kann ich die erste Ausnahme richtig abbrechen.

Post by Guest »

Ich habe mehrere Aufgaben, die ein Abbruchtoken akzeptieren und ThrowIfCancellationRequested aufrufen entsprechend. Diese Aufgaben werden gleichzeitig mit Task.WhenAll ausgeführt. Ich möchte, dass alle Aufgaben abgebrochen werden, wenn eine Aufgabe eine Ausnahme auslöst. Dies habe ich mit Select und ContinueWith:

erreicht

Code: Select all

var cts = new CancellationTokenSource();

try
{
var tasks = new Task[] { DoSomethingAsync(cts.Token), ... } // multiple tasks here
.Select(task => task.ContinueWith(task =>
{
if (task.IsFaulted)
{
cts.Cancel();
}
}));

await Task.WhenAll(tasks).ConfigureAwait(false);
}
catch (SpecificException)
{
// Why is this block never reached?
}
Ich bin mir nicht sicher, ob dies der beste Weg ist, es scheint einige Probleme zu geben. Es scheint, dass die Ausnahme intern abgefangen wird, Code nach WhenAll wird immer erreicht. Ich möchte nicht, dass der Code nach WhenAll erreicht wird, wenn eine Ausnahme aufgetreten ist. Ich möchte lieber, dass die Ausnahme ausgelöst wird, damit ich sie manuell auf einer anderen Ebene des Aufrufstapels abfangen kann. Was ist der beste Weg, dies zu erreichen? Wenn möglich, möchte ich, dass der Aufrufstapel intakt bleibt. Wenn mehrere Ausnahmen auftreten, wäre es am besten, wenn nur die erste Ausnahme erneut ausgelöst wird, keine AggregateException.



In diesem Zusammenhang habe ich versucht, das Abbruchtoken wie folgt an ContinueWith zu übergeben: task.ContinueWith(lambda, cts.Token). Wenn jedoch in einer Aufgabe eine Ausnahme auftritt, wird letztendlich eine TaskCanceledException anstelle der Ausnahme ausgelöst, an der ich interessiert bin. Ich dachte, ich sollte das Abbruchtoken an ContinueWith übergeben, da dies ContinueWith< abbrechen würde /code> selbst, was meiner Meinung nach nicht das ist, was ich will.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post