我想知道“continueWhith”什么時候有例外。我做了一個這樣的代碼。Task.Factory.StartNew(() =>{ if(HasException()) throw new Exception("Exception"); // Logic}).ContinueWith(x =>{ // Do something to UI.}, CancellationToken.None, TaskContinuationOptions.NotOnFaulted, _uiScheduler).continueWith(x =>{ if (x.Exception.IsNotNull()) // Exception handling here. ShowExceptionMessage(x.Exception); }我原以為最后 continueWith 任務會出現(xiàn)異常,但事實并非如此。最后continueWith任務中沒有異常是對的嗎?我想知道如何在 continueWith 中設置異常屬性。
1 回答

牛魔王的故事
TA貢獻1830條經(jīng)驗 獲得超3個贊
最后continueWith任務中沒有異常是對的嗎?
是的,因為它是“對 UI 做點什么”任務的延續(xù)。x.Exception
如果第二個任務失敗,只會有一個例外。
事實上,我不希望你達到任何一個延續(xù),因為你的第一個任務總是出錯,第一個延續(xù)明確說只有在它沒有出錯的情況下才執(zhí)行。
備擇方案:
通過第二個任務的結(jié)果傳播異常(如果有)
將兩個延續(xù)添加到原始任務,而不是鏈接它們。(這可能是您最初的意圖,以便將故障路徑和無故障路徑分開。在這種情況下,將兩個延續(xù)附加到第一個任務,并
TaskContinuationOptions.OnlyOnFaulted
用于第二個延續(xù) - 那么您不需要在全部。)在原始任務中保留一個局部變量,以便您可以從第二個延續(xù)中獲得該變量
理想情況下,我建議使用 async/await 而不是所有的 continuation 傳遞。它往往會使事情變得簡單得多。
- 1 回答
- 0 關注
- 188 瀏覽
添加回答
舉報
0/150
提交
取消