日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第十节:利用async和await简化异步编程模式的几种写法

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十节:利用async和await简化异步编程模式的几种写法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 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 task = Task.Run(() =>7 {8 Console.WriteLine("子線程{0}開始:", Thread.CurrentThread.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<T>能夠使用await, Task.WhenAny, Task.WhenAll等方式組合使用,async Void 不行。

代碼實踐:

?

1 /// <summary>2 /// 不推薦void返回值,使用Task來代替3 /// Task和Task<T>能夠使用await, Task.WhenAny, Task.WhenAll等方式組合使用。async Void 不行4 /// </summary>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.ManagedThreadId); 15 }); 16 await task; //等待子線程執行完畢,方可執行后面的語句 17 Console.WriteLine("主線程{0}結束:", Thread.CurrentThread.ManagedThreadId); 18 }

?

代碼結果:

?

情況3:async Task == async void。 區別:Task和Task<T>能夠使用await, Task.WhenAny, Task.WhenAll等方式組合使用,async Void 不行。

代碼實踐:

?

1 /// <summary>2 /// 無返回值 async Task == async void3 /// Task和Task<T>能夠使用await, Task.WhenAny, Task.WhenAll等方式組合使用,async Void 不行4 /// </summary>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.ManagedThreadId); 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 /// <summary>
2 /// 帶返回值的Task,要使用返回值,一定要等子線程計算完畢才行
3 /// </summary>
4 /// <returns></returns>
5 private static async Task<long> Test4()
6 {
7 //主線程執行
8 Console.WriteLine("主線程{0}開始:", Thread.CurrentThread.ManagedThreadId);
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 /// <summary>2 /// 帶返回值的Task,要使用返回值,一定要等子線程計算完畢才行3 /// 與情況四形成對比,沒有等待,最終結果不準確4 /// </summary>5 /// <returns></returns>6 private static Task<long> Test5()7 {8 //主線程執行9 Console.WriteLine("主線程{0}開始:", Thread.CurrentThread.ManagedThreadId); 10 long result = 0; 11 //啟動新線程完成任務 12 TaskFactory taskFactory = new TaskFactory(); 13 Task<long> task = taskFactory.StartNew<long>(() => 14 { 15 for (long i = 0; i < 100; i++) 16 { 17 result += i; 18 } 19 return 1; 20 }); 21 Console.WriteLine("主線程{0}結束:", Thread.CurrentThread.ManagedThreadId); 22 Console.WriteLine("result:{0}", result); 23 return task; 24 }

?

代碼結果:

?  以上兩種情況,第一種情況含有線程等待的結果為4950,第二個情況么有線程等待,結果不準確(即共享變量競用問題)。

總結

以上是生活随笔為你收集整理的第十节:利用async和await简化异步编程模式的几种写法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.天堂在线 | 日本免费一区二区三区四区五六区 | 亚洲视频网站在线 | 欧美天天爽 | 成年人爱爱视频 | 欧美91av | 欧美美女网站 | 欧美性受xxxxxx黑人xyx性爽 | 国产精品69久久久久 | 亚洲精品视频在线看 | 久操热线| 国产色无码精品视频国产 | 911美女片黄在线观看游戏 | 午夜精品久久久久久 | 国产高清自拍视频 | 成人午夜淫片免费观看 | 成人动漫在线观看免费 | 韩日视频一区 | 绿帽h啪肉np辣文 | 五月激情婷婷在线 | 亚洲欧美综合精品久久成人 | 手机看片日韩欧美 | 日韩精品无码一本二本三本色 | 美女高潮流白浆视频 | 天堂网av中文字幕 | 午夜之声l性8电台lx8电台 | 熟女俱乐部一区二区视频在线 | 日日操网 | 在线观看国产一区 | 久久精品国产一区二区三区 | 欧美人与禽性xxxxx杂性 | 三上悠亚人妻中文字幕在线 | 欧美色图五月天 | 国产福利视频一区二区 | 香蕉一区二区三区四区 | 久久女同 | 中文字幕午夜 | 色七七视频 | 精品免费囯产一区二区三区 | 精品精品精品 | 91视频成人| 高清无码一区二区在线观看吞精 | 韩国伦理中文字幕 | 正在播放日韩 | 亚洲情se| 成人av免费网站 | 男人的天堂99| 高清视频一区二区三区 | 毛片网站在线观看 | 人妻va精品va欧美va | 国产aa | 夫妻啪啪呻吟x一88av | 4438x亚洲最大 | 五月婷婷六月香 | 美日韩一二三区 | 精品一区二区三 | 日韩精品理论 | 国产精品视频久久久久久久 | 六月婷婷激情网 | 中文字幕35页 | 国产又色又爽无遮挡免费动态图 | 中文字幕高清在线 | 俺来也在线视频 | 91精品入口 | av资源在线 | 亚洲精品一区二区三区四区五区 | 中文字幕在线永久 | 五月婷婷,六月丁香 | 国产精品亚洲αv天堂无码 伊人性视频 | 欧美熟妇交换久久久久久分类 | av网站网址 | 毛片毛片毛片毛片毛片 | 国产第一页在线 | 一级真人毛片 | 免费黄色国产视频 | 老师张开让我了一夜av | 超碰激情在线 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 亚洲精品视频观看 | 亚洲日本中文 | 第五色婷婷| 亚洲福利精品 | 国产成人观看 | 国产日产精品一区二区三区四区 | 成人欧美一区二区三区黑人动态图 | 超碰女优| 久久精品视 | 成人免费版欧美州 | 看片免费黄在线观看入口 | 欧美激情免费在线观看 | 黑人巨大国产9丨视频 | 精品一区二区久久久久蜜桃 | 粉嫩av在线播放 | 国产做爰高潮呻吟视频 | 国产欧美激情在线观看 | www日本xxx| 在线观看免费视频一区 | 亚洲欧洲自拍 | 亚洲天堂av一区二区 |