2012-09-14 44 views
5

我的班級有一種使用TaskCompletionSource<int>產生Task<int>對象的方法。然後它執行一些異步操作並設置結果。我需要知道我是否可以信任任務的ContinueWith方法或不:如何取消任務的繼續?

public Task<int> CalculateAsync() 
{ 
    var source = new TaskCompletionSource(); 
    DoSomeAsyncStuffAndSetResultOf(source); 

    source.Task.ContinueWith(t => Console.WriteLine("Is this reliable?")); 
    return source.Task; 
} 

CalculateAsync方法的調用者可以做一些與生產任務,並防止其繼續運行?

回答

4

您可以將CancellationToken傳遞給ContinueWith的各種過載......這將是取消繼續IMO最常用的方式。

我不認爲你可以做任何事情父母任務取消繼續。我有點希望沒有,無論如何...

編輯:好吧,這聽起來像你想不是讓這種情況發生。不,你不需要擔心。除非呼叫者能夠以某種方式使任務永久運行而沒有完成,被取消或失敗,否則延續將會繼續。

+0

哦,我明白了 - 不,延續會一直運行(假設調用者不能強迫任務永遠運行,永遠不會完成)。 –

+0

我看到您的修改後刪除了評論。如果他在設置任務結果之前調用Dispose,該怎麼辦? –

+1

@ŞafakGür:根據Task.Dispose的文檔,這將引發InvalidOperationException。 –