根據微軟官方文件,推薦用tap模式編寫非同步程式,提供了用於取消task的 cancellationtoken 標記,實際應用中可以new 乙個cancellationtokensource物件。當我們需要乙個迴圈執行的機制時(在thread方式下通常是用thread.sleep,在task下就是await task.delay),需要停下來時,由於執行緒或task從外部都是無法停止的,要在內部通過這個 cancellationtoken 來自行停下來, 那麼就有兩個選擇:
每次迴圈開始時,使用 cancellationtoken.iscancellationrequested 判斷要不要停下來;在task.delay裡面加上cancellationtoken引數,然後截獲task.delay丟擲的 operationcanceledexception 異常。
以delay 50ms為例,測試結果表明,cancel前等待時間 方法1要短於方法2,估計方法2的 throw-try-catch 代價比較高,推薦使用方法1。
方法1,只通過 iscancellationrequested 測試:
static void main(string args)
static async void testcancel1(system.threading.cancellationtoken cancellationtoken)
console.writeline(datetime.now.tostring("hh:mm:ss fff") + " cancelled");
}//09:50:18 286
//09:50:18 413
//09:50:18 474
//09:50:18 527
//09:50:18 587
//09:50:18 603 cancel...
//09:50:18 649 cancelled
方法2,通過 iscancellationrequested 和 delay(50,cancellationtoken) 截獲異常:
static void main(string args)
static async void testcancel2(system.threading.cancellationtoken cancellationtoken)
console.writeline(datetime.now.tostring("hh:mm:ss fff") + " cancelled");
} catch(operationcanceledexception ex) }
//09:53:50 718
//09:53:50 843
//09:53:50 900
//09:53:50 964
//09:53:51 029
//09:53:51 031 cancel...
//09:53:51 808 throwed
linux定時執行任務後怎麼取消
使用crontab e命令,開啟任務程式檔案,然後刪除指定的任務即可。crontab命令說明如下 crontab命令被用來提交和管理使用者的需要週期性執行的任務,與windows下的計畫任務類似,當安裝完成作業系統後,缺省會安裝此服務工具,並且會自動啟動crond程序,crond程序每分鐘會定期檢查...
併發程式設計實戰 8 任務的執行與取消
單執行緒順序執行任務,效率過低,沒有發揮多核的優勢。為每個任務分配乙個執行緒去執行,速度有所提公升,但是有很大的缺陷。生產環境中,每乙個任務分配乙個執行緒的方法存在一些缺陷,尤其是需要建立大量的執行緒時 提供一種標準的方法將任務的提交過程與執行過程解耦,並用runnable來表示任務。executo...
Android執行緒池中的任務取消
executorservice pool executors.newfixedthreadpool 2 建立實現了runnable介面物件,thread物件當然也實現了runnable介面 thread t1 new mythread thread t2 new mythread thread t3...