我有這個代碼主題:取消令牌如何停止繼續?
foreach (string file in allDirectoriesFiles)
{
if (cancellationToken.IsCancellationRequested)
{
return;
}
// ... some operation...
}
// ... some operation 2...
通知我使用return
,而不是break
,因爲如果我停止線程的some operation 2
不能執行。
我還注意到,在這種方式下.ContinueWith它沒有執行。
那麼,但這只是一個「返回」功能。由於tokenSource.Cancel()
而不是通常的返回,C#如何知道我正在返回?
好吧!所以:如果當前線程被執行,我只能停止檢查它內部的取消標記(實際上它不會強制線程退出,換句話說:如果我沒有檢查,它會一直持續到結束如果繼續函數沒有啓動,那麼調用取消標記就不會(如果沒有我手動檢查),對嗎? – markzzz 2013-04-21 12:54:29
是的,這是正確的,即使是'正常'任務也不會被執行,如果取消令牌(創建它)在任務被任務調度程序處理之前被取消,你只能在你自己的任務中檢查這個標記,這樣你可以取消一個長時間運行的循環,等等。O和一個註釋:結束一個任務並不一定意味着線程(即運行的線程)退出,即使拋出異常也是如此。 – 2013-04-21 13:09:30