Ich habe viele Möglichkeiten ausprobiert, konnte aber die Abbruchausnahme in task.ContinueWith nicht abfangen. Gibt es etwas falsch hier:C#: So fangen Sie die Ausnahmebedingung in task.continuewith
CancellationTokenSource tokenSource = new CancellationTokenSource();
Task task = new Task(()=> { Thread.Sleep(1000); Console.WriteLine("in task!"); }, tokenSource.Token);
task.Start();
tokenSource.Cancel();
task.ContinueWith(t =>
{
if(t.IsCanceled)
{
AggregateException e = t.Exception;
if(e == null) // is true
Console.WriteLine("Cancelled: ");
}
});
Console.Read();
Die Ausgabe lautet:
Abgebrochen:
, die die Stornierung Ausnahme impliziert gefangen ist aber die Ausnahme selbst ist leer. Meine Frage ist, wie man die Annullierungsausnahme hier erhält?
Dank
Derek
Nun, wenn eine Aufgabe abgebrochen wird, dann weil Sie sie abgebrochen haben. Wenn eine Aufgabe fehlerhaft ist, kann es einen Grund dafür geben, und dann brauchen Sie die Ausnahme, um eine Ahnung zu haben. Warum benötigen Sie die Ausnahme, wenn die Aufgabe abgebrochen wird? BTW Wenn es eine Ausnahme gab, können Sie nur die OperationCanceledException erwarten. Es machte keinen Sinn, die Ausnahme zu behalten; o) –
Warum können Sie nicht einfach den 't.IsCanceled' Test verwenden? Das scheint ausreichend zu sein. – usr