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

溫馨提示×

溫馨提示×

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

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

非UI的子線程再啟動線程的話,等待的時候會被阻塞,Task不會阻塞了

發布時間:2020-04-07 23:31:42 來源:網絡 閱讀:86 作者:cnming 欄目:編程語言

需要在.Net 4.0才會有Task

當然,既然接觸到了Task,或許以后就不再用線程了,具體看情況了,之前幾個線程之間就發生了阻塞問題,這次就是要解決這個問題才下這個功夫的,否則寧可被差遣抱兒子尿尿去。

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.  
  6. using System.Threading.Tasks;  
  7. using System.Threading;  
  8.  
  9. namespace TaskDemo  
  10. {  
  11.     class Program  
  12.     {  
  13.         static void Main(string[] args)  
  14.         {  
  15.             Thread mTH = new Thread(RunTask);  
  16.             mTH.Start();  
  17.  
  18.             //Thread mTH1 = new Thread(RunThread);  
  19.             //mTH1.Start();  
  20.         }  
  21.  
  22.         private static void RunThread()  
  23.         {  
  24.             for (int i = 0; i < 20; i++)  
  25.             {  
  26.                 Thread.Sleep(2);  
  27.                 Console.WriteLine("RunThread{0}", i);  
  28.             }  
  29.         }  
  30.  
  31.         private static void RunTask()  
  32.         {  
  33.             try 
  34.             {  
  35.                 int mCount = 0;  
  36.  
  37.                 CancellationTokenSource tokenSource = new CancellationTokenSource();  
  38.                 CancellationToken token = tokenSource.Token;  
  39.  
  40.                 Task t = new Task(() =>  
  41.                 {  
  42.                     Console.WriteLine("進入任務……");  
  43.                     Thread.Sleep(10);  
  44.                     Console.WriteLine("任務開始工作……");  
  45.                     //模擬工作過程     
  46.                     for (int i = 0; i < 20; i++)  
  47.                     {  
  48.                         if (token.IsCancellationRequested == true)  
  49.                         {  
  50.                             break;          //這里別人是用一個throw new OperationCanceledException(token); 但是我用就會報錯  
  51.                         }  
  52.                         mCount++;  
  53.                         Console.WriteLine("RunTask{0}", i);  
  54.                         Thread.Sleep(1);  
  55.                     }  
  56.                 }, token);  
  57.                 token.Register(() =>  
  58.                {  
  59.                    Console.WriteLine("Canceled");  
  60.  
  61.                });  
  62.                 t.Start();  
  63.                 Console.WriteLine("這條語句先運行完畢了……");  
  64.                 t.ContinueWith((task) =>  
  65.                 {  
  66.                     Console.WriteLine("任務完成,完成時候的狀態為:");  
  67.                     Console.WriteLine("IsCanceled={0}\tIsCompleted={1}\tIsFaulted={2}\tmCount={3}", task.IsCanceled, task.IsCompleted, task.IsFaulted, mCount);  
  68.                 });  
  69.                 Console.WriteLine("現在就按任意鍵的話,程序就退出了……");  
  70.  
  71.                 RunThread();        //線程內部較耗時的測試  
  72.  
  73.                 Console.ReadKey();      //由于兩個sleep都有點時間,如果在這時間之前按下任意鍵,結果是程序提前終止了  
  74.                 tokenSource.Cancel();  
  75.                 Console.ReadKey();      //程序退出  
  76.  
  77.             }  
  78.             catch (Exception Ex)  
  79.             {  
  80.                 Console.WriteLine(Ex.Message);  
  81.             }  
  82.         }  
  83.  
  84.     }  
  85. }  
  86.  
  87.  
  88.  
  89.  

 

向AI問一下細節

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

AI

遂宁市| 保山市| 延长县| 襄垣县| 卢氏县| 双桥区| 南岸区| 辽宁省| 化隆| 江城| 镇安县| 都江堰市| 海丰县| 盐城市| 余姚市| 墨竹工卡县| 镇远县| 巴楚县| 奉贤区| 蕲春县| 施甸县| 三穗县| 定西市| 满城县| 拜泉县| 阳泉市| 玉屏| 隆尧县| 漳浦县| 公主岭市| 卢氏县| 定远县| 灵寿县| 枣强县| 平罗县| 宣城市| 镇原县| 临邑县| 吉隆县| 稷山县| 卫辉市|