您好,登錄后才能下訂單哦!
需要在.Net 4.0才會有Task
當然,既然接觸到了Task,或許以后就不再用線程了,具體看情況了,之前幾個線程之間就發生了阻塞問題,這次就是要解決這個問題才下這個功夫的,否則寧可被差遣抱兒子尿尿去。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Threading;
- namespace TaskDemo
- {
- class Program
- {
- static void Main(string[] args)
- {
- Thread mTH = new Thread(RunTask);
- mTH.Start();
- //Thread mTH1 = new Thread(RunThread);
- //mTH1.Start();
- }
- private static void RunThread()
- {
- for (int i = 0; i < 20; i++)
- {
- Thread.Sleep(2);
- Console.WriteLine("RunThread{0}", i);
- }
- }
- private static void RunTask()
- {
- try
- {
- int mCount = 0;
- CancellationTokenSource tokenSource = new CancellationTokenSource();
- CancellationToken token = tokenSource.Token;
- Task t = new Task(() =>
- {
- Console.WriteLine("進入任務……");
- Thread.Sleep(10);
- Console.WriteLine("任務開始工作……");
- //模擬工作過程
- for (int i = 0; i < 20; i++)
- {
- if (token.IsCancellationRequested == true)
- {
- break; //這里別人是用一個throw new OperationCanceledException(token); 但是我用就會報錯
- }
- mCount++;
- Console.WriteLine("RunTask{0}", i);
- Thread.Sleep(1);
- }
- }, token);
- token.Register(() =>
- {
- Console.WriteLine("Canceled");
- });
- t.Start();
- Console.WriteLine("這條語句先運行完畢了……");
- t.ContinueWith((task) =>
- {
- Console.WriteLine("任務完成,完成時候的狀態為:");
- Console.WriteLine("IsCanceled={0}\tIsCompleted={1}\tIsFaulted={2}\tmCount={3}", task.IsCanceled, task.IsCompleted, task.IsFaulted, mCount);
- });
- Console.WriteLine("現在就按任意鍵的話,程序就退出了……");
- RunThread(); //線程內部較耗時的測試
- Console.ReadKey(); //由于兩個sleep都有點時間,如果在這時間之前按下任意鍵,結果是程序提前終止了
- tokenSource.Cancel();
- Console.ReadKey(); //程序退出
- }
- catch (Exception Ex)
- {
- Console.WriteLine(Ex.Message);
- }
- }
- }
- }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。