這是這個問題的延續: Multiple Task Continuation任務取消的異常(ThrowForNonSuccess)
我已經改變了我的代碼作爲答案,但現在我收到TaskCancelledExceptions
當我嘗試運行任務。
public virtual async Task RunAsync(TaskWithProgress task)
{
Show();
TaskIsRunning();
await SetCompletedHandler(TaskComplete());
await SetCancelledHandler(TaskCancelled())
await SetFaultedHandler(TaskFaulted());
await task;
Close();
}
但是下面的代碼沒有。至於爲什麼,我有點卡住了。
public virtual Task RunAsync(TaskWithProgress task)
{
Show();
TaskIsRunning();
SetCompletedHandler(TaskComplete());
SetCancelledHandler(TaskCancelled())
SetFaultedHandler(TaskFaulted());
return task;
}
調用代碼主要涉及以下內容:
await progressDialog.RunAsync(task);
編輯:
我不取消cancellationtoken
任何地方,所以我不明白爲什麼這是拋出該異常。
三個SetXXXHandler()方法基本上與不同延續狀態執行以下代碼:
task.ContinueWith(_ => action(), CancellationToken.None, TaskContinuationOptions.OnlyOnCanceled, this.Scheduler);
堆棧跟蹤是在這裏:
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()
簡單地關閉窗體。如果我刪除該行,則會發生同樣的情況。
最有可能的是,某處的某些代碼正在取消'CancellationToken'。 –
多數民衆贊成在奇怪的事情,它不是。我解開了我的'cancellationToken.Cancel()',它仍然發生。 – Simon
什麼是堆棧跟蹤?那麼Close()在這裏呢? – Heath