C Task 暫停與取消

2022-02-16 07:48:12 字數 1874 閱讀 1198

2023年12月12日 10:03:52 white_hacker 閱讀數 11241 標籤: c#

task

執行緒多執行緒更多

個人分類: c#

task

多執行緒本篇的內容也很重要,因為涉及到了日常經常會碰到的取消任務操作。

從我個人了解到的情況,基本上大家都採用cancellationtokensource方法來取消任務,因此這裡就舉幾個簡單的例子。例子依然是來自於《c#多執行緒程式設計實戰》。

private static int taskmethod(string name, int seconds, cancellationtoken token)return 42*seconds;}

task的取消採用一種形如令牌(token)的方式。首先先構建乙個cancellationtokensource例項,而後在需要呼叫的操作(函式)引數中新增乙個cancellationtoken引數,也就是說,取消是要求增加函式引數的。以上taskmethod方法中可以看出,函式使用迴圈檢查的方式來檢測在seconds秒內,外部是否下達取消指令。當iscancellationrequested時,那麼將會返回-1.

接下來,先看一下如果task沒有被執行就直接取消,會發生什麼。

var cts = new cancellationtokensource();var longtask = new task(() => taskmethod("task 1", 10, cts.token), cts.token);console.writeline("取消前,第乙個任務的狀態:", longtask.status);cts.cancel(); //取消任務!

console.writeline("取消後,第乙個任務的狀態:",longtask.status);

console.writeline("第乙個任務在被執行前就已經取消了!");

接下來,我們來看看start()後再cancel()的情況。示例中每隔半秒列印一下longtask的狀態:

var cts = new cancellationtokensource();var longtask = new task(() => taskmethod("task 2", 10, cts.token), cts.token);longtask.start(); //啟動任務for (int i = 0; i < 5; i++)

特別需要說明的是,在cancel了以後,任務狀態顯示為rantocompletion,這是因為從tpl的視角看,這個任務雖然取消了,但是它正常完成了工作並且返回了-1.

C Task 暫停與取消

1.宣告引數 1 cancellationtokensource tokensource new cancellationtokensource 2 cancellationtoken token tokensource.token 3 manualresetevent resetevent new...

C Task任務取消

在使用blazor開發工具時,有個需求 掃碼登入頁面需要不斷輪詢介面獲取掃碼狀態,並在對應的狀態下進行對應的操作 重新整理 登入 跳轉等 此時,為了不阻塞前端的響應,需要我們開啟乙個執行緒進行狀態檢測,並在完成後結束執行緒任務 使用取消令牌 cancellationtokensource 相對操作比...

python執行緒的暫停與繼續 執行緒暫停與繼續實現

c 執行緒暫停與繼續解決方案 昨天,老師要我們每個人交乙個關於黑客方面的程式,想了半天發現埠掃瞄工具好像好寫點,從昨天寫到今天基本快完成了,給大家看下效果,不要笑話我哦哦 圖1 埠掃瞄器 這個程式裡面有一些地方不太滿意,就是掃瞄的暫停與繼續實現時,使用的是thread.suspend和thread....