首页 微博热点正文

惠安天气,第十节:使用async和await简化异步编程形式的几种写法,直播吧cctv5

一. async和await简介

PS:简介

1. async和await这两个关键字是为了简化异步编程模型而诞生的,使的异步编程跟简练,它本身并不创立新线程,但在该办法内部敞开多线程,则另算。

2. 这两个关键字适用于处理一些文件IO操作。

3. 优点:代码简介,把异步的代码写成了同步的方法,提高了开发功率。

 害处:假如运用同步思想去了解,简单出问题,返回值对不上。

二. 几种用法

状况1:当只要async,没有await时,办法会有个正告,和一般的多线程错爱邪魅总裁办法没有什么差异,不存在线程等候的问题。

代码实践:

 1 private static async void Test1()
2 {
3 //主线程履行
4 Console.WriteLine("主线程{0}开端:", Thread.CurrentThread.ManagedThreadId);
5 //发动新线程完成任务
6 Task ta惠安气候,第十节:运用async和await简化异步编程方法的几种写法,直播吧cctv5sk = Task.Run(() =>
7 {
8 Consol迅疾猎手e.WriteLine("子线程{0}开端:",尤小刚周庭伊有孩子 Thread.CurrentThrea惠安气候,第十节:运用async和await简化异步编程方法的几种写法,直播吧cctv5d.ManagedThreadId);
9 Thread.Sleep(3000);
10 Console.WriteLine("子线程{0}完毕:", Thread.CurrentThread.ManagedThreadId);
11 });
12 //主线程履行
13 Console.WriteLine("主线程{0}完毕:", Thread.CurrentThread.ManagedThreadId);
14 }

代码成果:

状况2:不引荐void返回值,运用Task来替代Task和Task可以运用await, Task.WhenAny, Task.WhenAll等方法组合运用,async Void 不可。

代码实践:

 1 /// 
2 /// 不引荐void返回值惠安气候,第十节:运用async和await简化异步编程方法的几种写法,直播吧cctv5,运用Task来替代
3 /// Task和Task可以运用await, Task.WhenAny, Task.WhenAll等方法组合运用。async Void 不可
4 ///

5 private static async void Test2()
6 {
7 /康元离子强化钙的本相/主线程履行
8 Console.WriteLine("主线程{0}开端:", Thread.CurrentThread.ManagedThreadId);
9 //发动新线程完成任务
10 Task task = Task.Run(() =>
11 {
12 Console.WriteLine("子线程{0}开端:", Thread.CurrentThread.ManagedThreadId);
13 Thread.Sleep(3000);
14 Console.WriteLine("子线程{0}完毕:", Thread.CurrentThread.Ma惠安气候,第十节:运用async和await简化异步编程方法的几种写法,直播吧cctv5nagedThreadId);
15 });
16 await task; //等候子线程履行完毕,方可履行后边的句子
17 Console.WriteLine("主线程{0}完毕:", Thread.CurrentThread.ManagedThreadId);
18 }

代码成果:

状况3:async Task == a吸允sync void。 差异:Task和陈忠铨Task可以运用await, Task.WhenAny, Task.WhenAll等方法组合运用,async Void 不可。

代码实践:

 1 /// 
2 /// 无返回值 asyn徐遵迪c Task == async void
3 //惠安气候,第十节:运用async和await简化异步编程方法的几种写法,直播吧cctv5/ Task和Task可以运用aw尹传柱ait, Task.WhenAny, Task.WhenAll等方法组合柜子壁橱门板运用,async Void 不可
4 ///

5 private static async Task Test3()
6 {淫秽扮演
7 //主线程履行
8 Console.WriteLine("主线程{0}开端:", Thread.CurrentThread.ManagedThreadId);
9 //发动新线程完成任务
10 Task task = Task.Run(() =>
11 {
12 Console.WriteLine("子线程{0}开端:", Thread.CurrentThread.ManagedThr惠安气候,第十节:运用async和await简化异步编程方法的几种写法,直播吧cctv5eadId);
13 Thread.Sleep(3000);
14 Console.WriteLine("子线程{0}完毕:", Thread.CurrentThread.ManagedThreadId);
15 });
16 await task; //等候子线程履行完毕,方可履行后边的句子
17 Console.WriteLine("主线程{0}完毕:", Thread.CurrentThread.ManagedThreadId);
18 }

代码成果:

状况4和状况5:阐明要运用子线程中的变量,一定要等子线程履行完毕后再运用。

代码实践:

 水咲1 /// 
2 /// 带返回值的Task,要运用返回值,一定要等子线程核算完毕才行
3 ///

4 ///
5 private static a惠安气候,第十节:运用async和await简化异步编程方法的几种写法,直播吧cctv5sync 龙啸大唐Task Test4()
6 {
7 //主线程履行
8 Console.WriteLine("主线程{0}开端:", Thread.CurrentThread.M赵棋荣anagedThreadId床奴);
9 long result = 0;
10 //发动新线程完成任务
11 Task task = Task.Run(() =>
12 {
13 for (long i = 0; i < 100; i++)
14 {
15 result += i;
16 }
17 });
18 await task; //等候子线程履行完毕,方可履行后边的句子
19 Console.WriteLine("主线程{0}完毕:", Thread.CurrentThread.ManagedThreadId);
20 Console.WriteLine("result:{0}", result);
21 return result;
22 }
 1 /// 
2 /// 带返回值的Task,要运用返回值,一定要等子线程核算完毕才行
3Yahalue /// 与状况四构成比照,没有等候,终究成果不精确
4 ///

5 ///
6 private static Task Test5()
7 {
8 //主线程履行
9 Console.WriteLine("主线程{0}开端:", Thread.CurrentThread.ManagedThreadId);
10 long result = 0;
11 //发动新线程完成任务
12 TaskFactory taskFactory = new TaskFactory();
13 Task task麻田真夕 = taskFactory.StartNew(() =>
14 {
15 for (long i = 0; i < 100; i++)
16 {
17 result += i;
18 }
19 return 1;
20 });
21 Console.WriteLin温碧霞走出婚变e("主线程{0}完毕:", Thread.Curren荣耀帝国tThread.ManagedThreadId);
22 Console.WriteLine("result:{0}", result);
23 return tas普斯帕k;
24 }

代码成果:

以上两种状况,第一种状况含有线程等候的成果为4950,第二个状况么有线程等候,成果不精确(即同享变量竞用问题)。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。