91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#怎么同時取消多個線程

發布時間:2021-08-16 14:58:47 來源:億速云 閱讀:171 作者:chen 欄目:開發技術

這篇文章主要講解了“C#怎么同時取消多個線程”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#怎么同時取消多個線程”吧!

目錄
  • 幾點關鍵問題解釋:

  • 同時取消多個線程:

有時間我們在使用多線程的時候,需要取消線程的執行,可以使用CancellationTokenSource來取消對Task開辟多線程的取消

如下:我們點擊一個按鈕開啟線程,然后點擊取消按鈕取消該線程的執行

C#怎么同時取消多個線程

 CancellationTokenSource cts ;
        /// <summary>
        /// 開啟線程
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            //重新實例化cts.Token就會不一樣,不然再次點擊的時候會報錯,提示線程已經執行完畢
            cts = new CancellationTokenSource();
 
            Task task = new Task(() =>
            {
                Thread.Sleep(1500);
 
                try
                {
                    cts.Token.ThrowIfCancellationRequested();
                    MessageBox.Show("線程被執行");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("線程被取消");
                }
 
            }, cts.Token);
            task.Start();
 
            //如果放到這里有可能線程還沒有開始執行就被取消了
            //cts.Cancel(true);
        }
 
        /// <summary>
        /// 取消線程
        /// </summary>
        private void button2_Click(object sender, EventArgs e)
        {
            cts.Cancel();
        }

 C#怎么同時取消多個線程

幾點關鍵問題解釋:

 1:為什么線程里邊去調用 Thread.Sleep(1500);

          因為如果不讓線程暫停一下,你在點擊開啟線程后。還沒有來得及點擊取消線程,線程都已經執行完畢了這個時候

          再去取消線程是沒有什么意義的。

2: cts.Cancel()

          這句話其實只是設置一個狀態,設置該對象一個熟悉為true而已,也就是設置cts.IsCancellationRequested為ture。

          所以他根本沒有真正的去取消線程的執行,只是設置一個狀態而已。

3:cts.Token.ThrowIfCancellationRequested();

          因為上面說的cts.Cancel()只是設置一個狀態而已,線程不會真正被取消。其實線程開啟后,現在都是要執行完的,

         我們并不能真正去取消線程的執行,只是從邏輯上去取消線程需要處理的邏輯。

         這句話的意思其實就是檢查cts.Cancel()設置的屬性狀態,也就是cts.IsCancellationRequested是否為true,如果為

         true就拋出一個異常,從而終止線程的執行

         也就是說其實這句話完全可以我們自己來實現

C#怎么同時取消多個線程

同時取消多個線程:

同時取消多個線程,其實也很簡單,我們不需要有多少個線程就去實例化多少個CancellationTokenSource,

多個線程綁定頂一個CancellationTokenSource的token然后調用該對象的cancel就可以同時取消多個線程了。

 CancellationTokenSource cts;
        /// <summary>
        /// 開啟線程
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            //重新實例化cts.Token就會不一樣,不然再次點擊的時候會報錯,提示線程已經執行完畢
            cts = new CancellationTokenSource();
 
            for (int i = 0; i < 5; i++)
            {
                Task task = new Task((obj) =>
                {
                    Thread.Sleep(1500);
 
                    try
                    {
                        //cts.Token.ThrowIfCancellationRequested();
                        //檢查狀態,檢查線程是否已經被取消,如果取消則自己跑出來一個線程
                        if (cts.Token.IsCancellationRequested)
                            throw new OperationCanceledException();
                        MessageBox.Show("線程" + obj + "被執行");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("線程" + obj + "被取消");
                    }
 
                }, i, cts.Token);
                task.Start();
            }
            //如果放到這里有可能線程還沒有開始執行就被取消了
            //cts.Cancel(true);
        }
 
        /// <summary>
        /// 取消線程
        /// </summary>
        private void button2_Click(object sender, EventArgs e)
        {
            cts.Cancel();
        }

C#怎么同時取消多個線程

感謝各位的閱讀,以上就是“C#怎么同時取消多個線程”的內容了,經過本文的學習后,相信大家對C#怎么同時取消多個線程這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武邑县| 芜湖县| 兰坪| 克拉玛依市| 揭西县| 成安县| 新民市| 长葛市| 商水县| 新邵县| 东兰县| 永顺县| 鄂州市| 任丘市| 甘德县| 夹江县| 靖宇县| 乐东| 洛宁县| 通榆县| 科技| 广昌县| 图木舒克市| 阳江市| 林西县| 周宁县| 佳木斯市| 兴国县| 郁南县| 利津县| 怀集县| 黔东| 景泰县| 新营市| 淳化县| 阜南县| 石台县| 石家庄市| 永靖县| 襄城县| 丰镇市|