亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

.NET異步編程初識async與await

2019-11-17 02:46:23
字體:
來源:轉載
供稿:網友

.NET異步編程初識async與await

這是兩個關鍵字,用于異步編程。我們傳統的異步編程方式一般是Thread、ThreadPool、BeginXXX、EndXXX等等。把調用、回調分開來,代碼的邏輯是有跳躍的,于是會導致思路不是很清晰的問題,在.NET 4.5中,新推出的async、await關鍵字,可以幫助我們像寫同步方法一樣去寫異步方法(保證代碼的整齊清晰)。

  先來看個傳統同步方法例子:

 1         static void Main(string[] args) 2         { 3             // 同步方式 4             Console.WriteLine("同步方式測試開始!"); 5             SyncMethod(0); 6             Console.WriteLine("同步方式結束!"); 7             Console.ReadKey(); 8         } 9 10         // 同步操作11         PRivate static void SyncMethod(int input)12         {13             Console.WriteLine("進入同步操作!");14             var result = SyancWork(input);15             Console.WriteLine("最終結果{0}", result);16             Console.WriteLine("退出同步操作!");17         }18 19         // 模擬耗時操作(同步方法)
20         private static int SyancWork(int val)21         {22             for (int i = 0; i < 5; ++i)23             {24                 Console.WriteLine("耗時操作{0}", i);25                 Thread.Sleep(100);26                 val++;27             }28             return val;29         }

  可以從右圖中看到執行結果,是非常典型的同步執行方法。

  async關鍵字能用在方法、lambda表達式的聲明部分,用來標示此方法可能包含await關鍵字,只有擁有async才能在其內部使用await關鍵字。異步方法可以具有Task、Task<>或void的返回類型;await關鍵字則是用于返回值是“可等待”類型(awaitable)的方法或lambda表達式內,“awaitable”可以是任何類型(常見的有Task、Task<>),它必須公開一個GetAwaiter()方法并且返回有效的”awaiter”。更詳細的信息可以參考“關于Async與Await的FAQ”,里面介紹了這些概念與注意事項。

  當一個async方法,且內部包含await關鍵字,它就會在編譯的時候成為一個異步方法,如果沒有await關鍵字,則它將只會被當成一個同步方法來執行。如果對其內部實現感興趣可以參考“異步性能:了解 Async 和 Await 的成本”一文,相信對深入了解這種機制還是有所幫助的。

  現在我們嘗試使用新出的異步關鍵字async、await來改造成異步調用:

static void Main(string[] args)
        {            // 異步方式            Console.WriteLine("/n異步方式測試開始!");            AsyncMethod(0);            Console.WriteLine("異步方式結束!");            Console.ReadKey();         }          // 異步操作        private static async void AsyncMethod(int input)        {            Console.WriteLine("進入異步操作!");            var result = await AsyncWork(input);            Console.WriteLine("最終結果{0}", result);            Console.WriteLine("退出異步操作!");        }        // 模擬耗時操作(異步方法)
        private static async Task<int> AsyncWork(int val)        {            for (int i = 0; i < 5; ++i)            {                Console.WriteLine("耗時操作{0}", i);                await Task.Delay(100);                val++;            }            return val;        }

  先來看結果吧,我們發現耗時操作已經是異步進行了。整體流程大概是先由Main函數異步調用AsyncMethod,并不等待AsyncMethod完成,繼續往下執行。而AsyncMethod方式在被調用后,在分配到時間片時開始啟動,執行函數體內容,并由于await AsyncWork語句而繼續異步調用AsyncWork,但由于await關鍵字,將在此等待AsyncWork完成后,再繼續往下執行。那么,AyncWork也一樣的,被調用后,在分配到時間片時開始啟動,執行耗時操作。

  可以看到,使用了新的關鍵字后,同步與異步編程的語法差別進一步減少。隨著.NET 4.5的推出,許多新類庫和既有類庫都支持這種新型的異步語法(比如HttpClient、HttpServer、MemoryStream...),它們以類似ReadAsync、WriteAsync、SendAsync等分開方法來提供具有async聲明,且返回類型為Task、Task<>的異步工作方式。

  補充:

  剛才有朋友提到await Task.Delay(100)這條語句,這是為了讓AsyncWork成為異步方法才加的,如果你要進行的操作不支持await修飾怎么辦,其實很簡單,使用Task.Factory.StartNew()就行了,舉例:

 1         // 異步操作 2         private static async void AsyncMethod(int input) 3         { 4             Console.WriteLine("進入異步操作!"); 5             var result = await Task.Factory.StartNew((Func<object, int>)SyncWork2, input); 6             Console.WriteLine("最終結果{0}", result); 7             Console.WriteLine("退出異步操作!"); 8         } 9 10         // 模擬耗時操作(同步方法)11         private static int SyncWork2(object input)12         {13             int val = (int)input;14             for (int i = 0; i < 5; ++i)15             {16                 Console.WriteLine("耗時操作{0}", i);17                 Thread.Sleep(100);18                 val++;19             }20             return val;21         }

  這樣,我們的SyncWork2實際上卻是異步執行的,所得結果與前面的異步方法一致,只是這樣一來輸入參數只能是object類型,需要進行類型轉化。另外,除了StartNew,我們還可以新建一個Task,然后調用Run,以完成同樣效果。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频电影图片偷拍一区| 欧美高清自拍一区| 亚洲图片欧洲图片av| 日韩电影中文字幕一区| 久久久久久久久久av| 一本大道亚洲视频| 91久久久久久久久久| 中文字幕亚洲在线| 亚洲第一福利网站| 国产欧美一区二区三区视频| 欧美性猛交xxxx乱大交蜜桃| 国产aaa精品| 日韩中文有码在线视频| 国产91在线播放精品91| 欧美激情精品久久久久久免费印度| 欧美一级电影免费在线观看| 久久久女人电视剧免费播放下载| 蜜臀久久99精品久久久无需会员| 欧美精品少妇videofree| 欧美日韩色婷婷| 国产男女猛烈无遮挡91| 久久精品国产久精国产一老狼| 日韩欧美成人网| 国产精品夜间视频香蕉| 国产精品1234| 国产精品嫩草影院一区二区| 青草青草久热精品视频在线观看| 91中文字幕在线观看| 久久天天躁狠狠躁夜夜躁| 国产欧美 在线欧美| 伊人久久大香线蕉av一区二区| 91在线看www| 久久免费视频观看| 一区二区成人精品| 色偷偷偷综合中文字幕;dd| 中文字幕无线精品亚洲乱码一区| 日韩精品在线观| 亚洲一区二区在线| 久久成人亚洲精品| 5278欧美一区二区三区| 精品露脸国产偷人在视频| 国产精品91久久久久久| 亚洲国产三级网| 色综合色综合久久综合频道88| 亚洲精品一区二区三区不| 亚洲日本欧美中文幕| 中文字幕一区二区精品| 国产999精品久久久影片官网| 国产精品美女在线| 成人福利网站在线观看11| 久久手机精品视频| 国产精品无码专区在线观看| 亚洲精品99久久久久中文字幕| 欧美中文字幕精品| 中文字幕少妇一区二区三区| 日韩av在线免费看| 国产91色在线|| 国产中文日韩欧美| 日本国产一区二区三区| 亚洲精品免费网站| 亚洲网在线观看| 亚洲精品一区二区在线| 久久久精品久久久久| 国产日韩精品视频| 国内精品国产三级国产在线专| 欧美日在线观看| 亚洲香蕉在线观看| 国产精品黄色影片导航在线观看| 国产精品免费一区二区三区都可以| 中文字幕av一区| 日韩人体视频一二区| 国产欧美在线看| 成人精品一区二区三区电影黑人| 中文字幕欧美在线| 久久全国免费视频| 国产一区二区av| 欧美日韩裸体免费视频| 欧美主播福利视频| 欧美高清不卡在线| 毛片精品免费在线观看| 日本中文字幕久久看| 九九热这里只有精品免费看| 亚洲综合中文字幕68页| 欧美一级视频在线观看| 国产精品亚洲激情| 亚洲a级在线播放观看| 成人黄色av播放免费| 久久亚洲春色中文字幕| 国产九九精品视频| 国产精品日韩欧美大师| 91国内精品久久| 97视频在线观看免费高清完整版在线观看| 97在线精品国自产拍中文| 国产啪精品视频| 一区二区中文字幕| 精品视频一区在线视频| 成人高清视频观看www| 北条麻妃久久精品| 在线观看视频亚洲| 欧洲美女7788成人免费视频| 国产精品三级网站| 欧洲成人免费aa| 奇门遁甲1982国语版免费观看高清| 亚洲国产成人精品一区二区| 国产精品看片资源| 色av中文字幕一区| 91wwwcom在线观看| 国产精品爱久久久久久久| 亚洲老头老太hd| 日韩一二三在线视频播| 日韩欧美福利视频| 日韩专区在线播放| 中文字幕一区日韩电影| 91精品国产综合久久久久久蜜臀| 日韩高清电影免费观看完整| 日韩精品黄色网| 91视频九色网站| 亚洲午夜国产成人av电影男同| 精品久久久久久中文字幕大豆网| 精品欧美aⅴ在线网站| 国产精品69精品一区二区三区| 国产成人自拍视频在线观看| 欧美成人亚洲成人| 欧美午夜精品伦理| 亚洲精品欧美一区二区三区| 国产精品久久久久久久久久免费| 日韩在线观看网址| 日韩电影中文字幕av| 亚洲开心激情网| 亚洲**2019国产| 午夜精品久久久久久99热软件| 91爱视频在线| 亚洲成人黄色在线观看| 亚洲成在人线av| 国产精品三级网站| 欧美视频专区一二在线观看| 欧美成人三级视频网站| 亚洲成人免费网站| 日韩在线观看网址| 中文字幕视频一区二区在线有码| 欧美激情国产高清| 亚洲成人av资源网| 亚洲男子天堂网| 一本久久综合亚洲鲁鲁| 97在线日本国产| 欧美日韩国产综合视频在线观看中文| 91精品久久久久久久久中文字幕| 色先锋资源久久综合5566| 国产精品一区二区久久久| 欧美国产日韩精品| 中文字幕在线视频日韩| 欧美精品久久久久| 久久久国产成人精品| 91国产视频在线播放| 亚洲2020天天堂在线观看| 91精品国产沙发| 亚洲人在线观看| 成人午夜高潮视频| 一本大道久久加勒比香蕉| 亚洲曰本av电影| 亚洲va欧美va国产综合久久| 中文字幕不卡av| 欧美性极品少妇精品网站| 久久精品视频中文字幕|