前言
其實Task跟線程池ThreadPool的功能類似,不過寫起來更為簡單,直觀。代碼更簡潔了,使用Task來進行操作。可以跟線程一樣可以輕松的對執(zhí)行的方法進行控制。
創(chuàng)建Task有兩種方式,一種是使用構(gòu)造函數(shù)創(chuàng)建,另一種是使用 Task.Factory.StartNew 進行創(chuàng)建。
如下代碼所示
1.使用構(gòu)造函數(shù)創(chuàng)建Task
1
|
Task t1 = new Task(MyMethod); |
2.使用Task.Factory.StartNew 進行創(chuàng)建Task
1
|
Task t1 = Task.Factory.StartNew(MyMethod); |
其實這兩種方式都是一樣的,Task.Factory 是對Task進行管理,調(diào)度管理這一類的。好學的伙伴們,可以深入研究。這不是本文的范疇,需要的朋友可以進去服務(wù)器之家進行學習。
本文將充分使用Task的異步功能,下面來一起看看詳細的介紹吧。
代碼實現(xiàn):
1.實現(xiàn)了任務(wù)超時 退出任務(wù)
2.多個任務(wù)一起執(zhí)行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
/// <summary> ///做事 需要 ms秒 才能完成 /// </summary> /// <param name="time"></param> /// <returns></returns> static async Task< string > Doing( int time, string name = "我" ) { Console.WriteLine(name+ "來了" ); await Task.Delay(TimeSpan.FromMilliseconds(time)); return string .Format( "這活{1}干了:{0}ms " , time,name); } /// <summary> /// 設(shè)定超時任務(wù) 如果超時返回 /// </summary> /// <param name="needTimeOut"></param> /// <returns></returns> static async Task< string > TimeOut( bool needTimeOut) { Console.WriteLine(needTimeOut); var t= new Stopwatch(); t.Start(); var timeOutTask = Task.Delay(150); //1.設(shè)定一個超時的任務(wù) var doing = Doing(needTimeOut ? 100 : 300); //2. 真正需要執(zhí)行的任務(wù) var task = await Task.WhenAny(doing,timeOutTask); //返回任何一個完成的任務(wù) if (task == timeOutTask) //如果超時任務(wù)先完成了 就返回 很可惜 他沒有完成! { return "很可惜 他沒有完成!" ; } t.Stop(); Console.WriteLine( "耗時:" +t.Elapsed.TotalMilliseconds); return await doing; } /// <summary> /// 多任務(wù)一起執(zhí)行 /// </summary> /// <returns></returns> static async Task Tasks() { var t = new Stopwatch(); t.Start(); var list= new List< string >(); var t1 = Doing(1000, "1000" ); //1.定義任務(wù) var t2 = Doing(1500, "1500" ); var t3 = Doing(1200, "1200" ); var tasks = new [] {t1, t2, t3}; //2.任務(wù)組 var process = tasks.Select(async tt => //3.等待任務(wù)結(jié)束 并保存值 { var result = await tt; list.Add(result); }); await Task.WhenAll(process); //4.等待處理完全 foreach (var i in list) //5.查看結(jié)果 { Console.WriteLine(i); } t.Stop(); Console.WriteLine( "耗時:" + t.Elapsed.TotalMilliseconds); } |
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。
原文鏈接:http://www.cnblogs.com/change4now/p/8012350.html