Task是.NET推出數據任務處理的工作類,Task的使用也被越來越多的人講解,這里僅僅介紹Task的部分使用介紹;
1、Task簡單創建
--無返回值
Task.Factory.StartNew(() =>{ Console.WriteLine('Hello World'); });
--返回字符串類型
Task.Factory.StartNew(() =>{ Console.WriteLine('Hello World'); return 'I'm OK !' });
備注:Task還有Wait方法等待Task任務的完成之后,走下面代碼;
2、Task數據同步控制
之所以說控制,是因為Task執行的時候,我們能夠通過一個公用的參數變量來控制Task任務的進行,之前我們使用的方式是全局定義一個Bool類型的數據,通過判斷該變量值來控制程序的進行;在Task中,我們可以使用CanCellationToken來控制,事例代碼如下:
static CancellationTokenSource CancellTokenSource = new CancellationTokenSource(); static void MainTask() { Task.Factory.StartNew(() => { while (!CancellTokenSource.IsCancellationRequested) { Console.WriteLine("Hello Good"); } }, CancellTokenSource.Token); CancellTokenSource.CancelAfter(3000); }
當然CanCellationToken也是可以交叉使用,如下面事例代碼:
static CancellationTokenSource C1 = new CancellationTokenSource(); static CancellationTokenSource C2 = new CancellationTokenSource(); static CancellationTokenSource C3 = new CancellationTokenSource(); static CancellationTokenSource CancellTokenSource = new CancellationTokenSource(); static void MainTaskMuilte() { CancellTokenSource = CancellationTokenSource.CreateLinkedTokenSource(C1.Token, C2.Token, C3.Token); Task.Factory.StartNew(() => { while (!CancellTokenSource.IsCancellationRequested) { Console.WriteLine("Hello Good"); } }, CancellTokenSource.Token); C3.CancelAfter(3000);//只要有一個CanCellationToken停掉,該語句就結束 }
3、Task的WhenAny和WhenAll方法介紹:
WhenAny表示任意一個Task完成之后,返回這個Task對象,但是有時候我們需要等待任務的完成,比如競賽,只有有一個人完成,WhenAny就會返回這個人內容(有點不太切合實際),WhenAll表示處理完成之后,返回所有對象實例,代碼如下:
public async void OpeartTask() { List<Task<string>> TaskList = new List<Task<string>>() { Task.Factory.StartNew(()=> { return WriteHello(10); },C1.Token), Task.Factory.StartNew(()=> { return WriteHello(20); },C1.Token), Task.Factory.StartNew(()=> { return WriteHello(30); },C1.Token), Task.Factory.StartNew(()=> { return WriteHello(40); },C1.Token) }; //var Reuslt= await Task.WhenAll(TaskList); var Reuslt = await Task.WhenAny(TaskList); if (Reuslt.IsCompleted) { Console.WriteLine("I'm "+Reuslt.Result+" OK,Other Must Stop"); C1.Cancel(); } }
備注:等待的時候,要加上async 和 await;
4、Task.AwaitAll等待所有Task執行完成,該操作是同步完成;