Dies ist eine Fortsetzung von dieser Frage: Multiple Task ContinuationAufgabe abgebrochen Exception (ThrowForNonSuccess)
Ich habe meinen Code wie in der Antwort geändert, aber jetzt habe ich TaskCancelledExceptions
erhalte, wenn ich versuche Aufgaben auszuführen.
public virtual async Task RunAsync(TaskWithProgress task)
{
Show();
TaskIsRunning();
await SetCompletedHandler(TaskComplete());
await SetCancelledHandler(TaskCancelled())
await SetFaultedHandler(TaskFaulted());
await task;
Close();
}
jedoch der folgende Code nicht. Ich bin ein bisschen fest, warum.
public virtual Task RunAsync(TaskWithProgress task)
{
Show();
TaskIsRunning();
SetCompletedHandler(TaskComplete());
SetCancelledHandler(TaskCancelled())
SetFaultedHandler(TaskFaulted());
return task;
}
Der Aufrufcode umfasst im Wesentlichen die folgenden:
await progressDialog.RunAsync(task);
Edit:
ich kündigen keine cancellationtoken
überall so kann ich nicht sehen, warum dies, dass die Ausnahme wirft.
Die drei SetXXXHandler() Methoden führen im wesentlichen den folgenden Code mit verschiedenen Fortsetzung Status:
task.ContinueWith(_ => action(), CancellationToken.None, TaskContinuationOptions.OnlyOnCanceled, this.Scheduler);
Der Stack-Trace ist hier:
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at FugroDXExt.frmBaseProgressAsync.<RunAsync>d__7.MoveNext() in d:\C#\FugroDXExt\trunk\frmBaseProgressAsync.cs:line 92
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at FCP.Forms.frmProcessing.<mnuApplyCenteredSmoothing_ItemClick>d__34.MoveNext() in d:\C#\FCP\FCP\Forms\frmProcessing.cs:line 578
Close()
schließt einfach das Formular aus. Wenn ich diese Zeile entferne, passiert das Gleiche.
Höchstwahrscheinlich wird irgendwo ein Code storniert ein 'CancellationToken'. –
Das ist das seltsame Ding, es ist nicht. Ich hakte meine 'cancellationToken.Cancel()' aus und es tritt immer noch auf. – Simon
Was ist der Stack-Trace? Und was macht Close() so hier? – Heath