2015-10-05 77 views
0

鑑於這樣的事情:執行ContinueWith當其他延續還沒有執行

.ContinueWith((_, o) => this.Foo(), null, TaskContinuationOptions.OnlyOnRanToCompletion) 
.ContinueWith((_, o) => this.Bar(), null, TaskContinuationOptions.OnlyOnFaulted) 
.ContinueWith((_, o) => this.AnythingElse(), null, TaskContinuationOptions.? 

有沒有什麼辦法來構建一個延續的其他延續還沒有執行時將執行AnythingElse

我要趕所有其他可能終止,但只有前兩個的延續之一以上尚未執行。

+0

如果我理解正確,如果Foo或Bar沒有完成,你只想執行'AnythingElse'?這對我來說並不是很清楚,因爲你使用了'ContinueWith'(這意味着:在完成上一個任務後運行_this_),但是你說只有當它們還沒有執行時纔想繼續。 –

+0

如果沒有執行任何東西,我想要執行任何東西異常,並沒有運行完成 - 更重要的是 - 在任何情況下,foo和bar都沒有執行。 – Jim

+0

_I想要anythingelse執行,如果沒有例外,它沒有運行到completion_它如何不能運行到完成?你想設置超時嗎?我不完全確定你的意思。 –

回答

0

使用OnlyOnCancelled,因爲這是唯一的其他情況。

您也可以使用一個統一延續,並根據任務狀態決定如何執行。我認爲這是最簡潔的方式,因爲它會產生順序的代碼。

+0

恐怕只是在當前的一段代碼中使用'OnlyOnCanceled'將無法正常工作,以免'Foo'被取消。 –

+0

如果Foo被取消,那麼先行詞(此處未顯示)和ContinueWith任務都不會以取消狀態結束。 – usr