欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# 使用 CancellationTokenSource 終止線程

admin
2024年3月19日 11:22 本文熱度 644

我們?cè)诙嗑€程中通常使用一個(gè)bool IsExit類似的代碼來(lái)控制是否線程的運(yùn)行與終止,其實(shí)使用CancellationTokenSource來(lái)進(jìn)行控制更為好用,下面我們將介紹CancellationTokenSource相關(guān)用法。


C# 使用 CancellationTokenSource 終止線程

使用CancellationTokenSource對(duì)象需要與Task對(duì)象進(jìn)行配合使用,Task會(huì)對(duì)當(dāng)前運(yùn)行的狀態(tài)進(jìn)行控制(這個(gè)不用我們關(guān)心是如何孔控制的)。而CancellationTokenSource則是外部對(duì)Task的控制,如取消、定時(shí)取消。


下面我們來(lái)看看示例代碼:

class Program    {        //聲明CancellationTokenSource對(duì)象        static CancellationTokenSource cancelTokenSource = new CancellationTokenSource();         //程序入口        static void Main(string[] args)        {            Task.Factory.StartNew(MyTask, cancelTokenSource.Token);             Console.WriteLine("請(qǐng)按回車鍵(Enter)停止");            Console.ReadLine();             cancelTokenSource.Cancel();                        Console.WriteLine("已停止");            Console.ReadLine();        }         //測(cè)試方法        static void MyTask()        {            //判斷是否取消任務(wù)            while (!cancelTokenSource.IsCancellationRequested)            {                Console.WriteLine(DateTime.Now);                Thread.Sleep(1000);            }        }    }

Task.Factory.StartNew 創(chuàng)建并啟動(dòng)了 MyTask 方法,并傳遞了一個(gè) CancellationTokenSource.Token 對(duì)象進(jìn)去。我們可以通過(guò)在外部CancellationTokenSource對(duì)象進(jìn)行控制是否取消任務(wù)的運(yùn)行。


當(dāng)在 MyTask 中的 cancelTokenSource.IsCancellationRequested 判斷如果是取消了任務(wù)的話 就跳出while循環(huán)執(zhí)行。也就結(jié)束了任務(wù)。 


我們還可以使用計(jì)時(shí)取消任務(wù),當(dāng)一個(gè)任務(wù)超過(guò)了我們所設(shè)定的時(shí)間然后自動(dòng)取消該任務(wù)的執(zhí)行。如下代碼所示:

var cancelTokenSource = new CancellationTokenSource(3000);

除了構(gòu)造函數(shù),我們還可以使用另外一種方式實(shí)現(xiàn)定時(shí)取消,如下代碼所示:

cancelTokenSource.CancelAfter(3000);

運(yùn)行起來(lái)效果是一樣的,3秒鐘定時(shí)取消。

 


多個(gè) CancellationTokenSource 復(fù)合

在有多個(gè)CancellationTokenSource需要一起并行管理的時(shí)候,比如任意一個(gè)任務(wù)取消 則取消所有任務(wù)。我們不必去一個(gè)一個(gè)的去關(guān)閉,只需要將需要一起并行關(guān)閉的CancellationTokenSource組合起來(lái)就行了。如下代碼所示,執(zhí)行結(jié)果是跟上面的圖一樣的。我就不再上圖了。

class Program    {        //聲明CancellationTokenSource對(duì)象        static CancellationTokenSource c1 = new CancellationTokenSource();        static CancellationTokenSource c2 = new CancellationTokenSource();        static CancellationTokenSource c3 = new CancellationTokenSource();         //使用多個(gè)CancellationTokenSource進(jìn)行復(fù)合管理        static CancellationTokenSource compositeCancel = CancellationTokenSource.CreateLinkedTokenSource(c1.Token, c2.Token, c3.Token);         //程序入口        static void Main(string[] args)        {            Task.Factory.StartNew(MyTask, compositeCancel.Token);             Console.WriteLine("請(qǐng)按回車鍵(Enter)停止");            Console.ReadLine();             //任意一個(gè) CancellationTokenSource 取消任務(wù),那么所有任務(wù)都會(huì)被取消。            c1.Cancel();                        Console.WriteLine("已停止");            Console.ReadLine();        }         //測(cè)試方法        static void MyTask()        {            //判斷是否取消任務(wù)            while (!compositeCancel.IsCancellationRequested)            {                Console.WriteLine(DateTime.Now);                Thread.Sleep(1000);            }        }    }

以上代碼調(diào)用了c1.Cancel();觸發(fā)了MyTask()方法中的compositeCancel.IsCancellationRequested為true,則取消了任務(wù)。所以我們?cè)谒腥蝿?wù)中判斷復(fù)合的這個(gè)CancellationTokenSource對(duì)象即可。


該文章在 2024/3/19 11:22:07 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved