1
我有一個函數,使一個新的HTTP請求,並在任務運行。 該函數可以在中間被中斷,因爲我不能中止任務,我在函數中添加了一些布爾條件。 例如:取消功能
public int foo(ref bool cancel)
{
if(cancel)
{
return null
}
//do some work...
if(cancel)
{
return null
}
//http webrequest
if(cancel)
{
return null
}
}
thisworked相當不錯的,雖然這是相當一些醜陋的代碼。
另一個問題是,當我已經執行的Web請求,這需要時間,我得到比功能cncelation的反應需要大量的時間(直到我得到迴應)。
有沒有更好的辦法,我檢查這個?或mybe我應該使用線程而不是任務?
編輯
我添加了一個取消令牌:宣佈cancelationTokenSource,並通過它的令牌任務
CancellationTokenSource cncelToken = new CancellationTokenSource();
Task t = new Task(() => {foo()},cancelToken.token);
當我這樣做cancelToken.Cancel(); 我還在等待迴應,而且tsk並未取消。
什麼奇妙的完整,很好地解釋了答案! – RMalke 2013-03-22 17:52:58
但它與我的解決方案相似。只有我的任務調用一個函數,並且該函數不知道取消令牌。我仍然必須檢查是否要求取消。我可以使用一個cancelation令牌,但是我仍然不得不等待回覆。我想在此之前取消它。 – alostr 2013-03-22 17:54:56
不是真的 - 需要輪詢取消令牌只有當您有一些清理執行。如果沒有任何清理任務將悄悄停止執行您的代碼。 – Ani 2013-03-22 18:27:04