當非同步任務執行時,使用者突然改變心意了,該怎麼取消任務,同樣的若處理時間過久,
是否可以設定逾時機制,自動取消?
先來看看基本取消如何使用,使用 CancellationTokenSource 物件的 Cancel() 方法 ,它會改
變裡面的 Token 屬性的 IsCancellationRequested 的值,若判斷為 true 值,則client 端可判斷
為「通知」任務被取消,採取相關動作。
基本取消任務程式碼如下:
輸出結果:
若我們想要取消時呼叫一些凾式可以怎麼做?可以使用 Token.Register() 註冊相關凾式,
在剛剛的程式碼,加上一段註冊,其他的都不變,如下所示
當取消動作發生時,結果如下。但值得注意的是,實際發生的順序,是由後面註冊的凾式先執行。
同樣還是註冊取消時的 callback 凾式,當這些凾式當中有其中一個發生例外錯誤時,
就不執行其他還沒有執行的callback。可以在 source.Cancel(true); 設定一但其中發生就略過其他 callback 不執行。
程式碼如下,其中我們註冊的第3個任務,故意讓它丟出錯誤
由執行結果可以看出,當執行到第3個任務時,發生錯誤,後面的任務1與2 都沒有執行。其中
這邊是使用發行 release 後直接點選 .exe 執行,不然debug 會進入偵錯模式。
這邊是使用發行 release 後直接點選 .exe 執行,不然debug 會進入偵錯模式。
最後就是設定工作任務逾時,若超過一定時間就取消任務。可以在建立 source 的時候
直接在建構式傳入逾時的時間,也可以在 CancelAfter() 凾式設定
執行結果。
沒有留言:
張貼留言