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

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

[.net 面向對象程序設計進階] (19) 異步(Asynchronous) 使用異步創建快速響應和可伸縮性的應用程序

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

[.net 面向對象程序設計進階] (19) 異步(Asynchronous) 使用異步創建快速響應和可伸縮性的應用程序

[.net 面向對象程序設計進階] (19) 異步(Asynchronous) 使用異步創建快速響應和可伸縮性的應用程序

本節導讀:

本節主要說明使用異步進行程序設計的優缺點及如何通過異步編程.

使用傳統方法BeginInvoke/EndInvoke來實現異步。

使用async/await創建異步方法和事件。

通過異步編程創建具有快速響應和可伸縮性的應用程序。

讀前必備:

A.委托[.net面向對象編程基礎](21)委托

B.事件[.net面向對象編程基礎] (22)事件

1.異步程序設計的優缺點:

A.讓用戶界面快速響應;對于耗時操作阻塞UI線程,通過異步回調可使用UI快速響應。

B.創建高伸縮性的應用。對于服務端應用,創建更多線程來處理消耗資源較多,使用異步可使用主線程繼續工作,不需要等待返回。使用程序具有更好的伸縮性。

對于異步的缺點,最主要一點就是比創建同步程序難度大一些,首先使用傳統的方法創建異步,比起同步更容易出錯。不過隨著.NET的不斷發展和第三方異步組件的豐富,創建異步應用程序也變得越來越簡單了。

2.異步的實現

對于.NET中的異步編程,.NET在各個方向都幾乎提供了同步和異步的兩個方式來實現,在這里我們不能把.NET中全部的異步編程方法都列舉出來了,下面介紹幾種常用且實用的異步方法。

3.使用BeginInvoke/EndInvoke實現異步

3.1簡單的異步示例

下面看一個簡單的示例:

//使用一個有返回值的泛型委托來執行BeginInvokeFunc<string> myFunc = new Func<string>(()=>{    Thread.Sleep(10);    return "我是異步執行完成的返回值 當前時間:" + System.DateTime.Now.ToString();});IAsyncResult asynResult = myFunc.BeginInvoke(null, null);//在異步沒有完成前,可以做別的事while (!asynResult.IsCompleted){    //當不是true時,就執行這里的代碼    Console.WriteLine("當前異步是否完成:" + asynResult.IsCompleted + " 當前時間:" + System.DateTime.Now.ToString());}string result = myFunc.EndInvoke(asynResult);//當是true時,就將結果返回顯示Console.WriteLine(result);

運行結果如下:

在異步沒有完成時,可以繼續工作做一些想做的事,異步完成后返回結果。

3.2使用異步的超時WaitOne判斷異步完成

除了上面使用IsCompleted來判斷異步完成之外,也可以使用超時來判斷異步的完成情況

示例如下:

//使用一個有返回值的泛型委托來執行BeginInvokeFunc<string> myFunc = new Func<string>(()=>{    int i = 0;    while (i<99999999)        ++i;    return "異步執行完成的返回值" + (i).ToString() + " 當前時間:" + System.DateTime.Now.ToString();   });IAsyncResult asynResult = myFunc.BeginInvoke(null, null);while (!asynResult.AsyncWaitHandle.WaitOne(10, false))    Console.Write("*");string result = myFunc.EndInvoke(asynResult);Console.Write("/n");Console.WriteLine(result);

運行結果如下:

3.3回調

畢竟上述兩種等待不是一個好的方法。我們在前端開發中使用過Ajax的同學肯定知道,前端中異步使用一個回調函數在異步完成后完成我們想要做的事,.NET自然也有類似的回調方法,

看示例:

           //使用一個有返回值的泛型委托來執行BeginInvokeFunc<string> myFunc = new Func<string>(()=>{    int i = 0;    while (i<99999999)        ++i;    return "異步執行完成的返回值" + (i).ToString() + " 當前時間:" + System.DateTime.Now.ToString();   });IAsyncResult asynResult = myFunc.BeginInvoke((result) =>{    string rst = myFunc.EndInvoke(result);    Console.WriteLine("異步完成了,我該返回結果了!");    Console.WriteLine(rst);}, null);

運行結果如下 :

3.4 其它組件中的Begin/End異步方法

除了BeginInvoke/EndInvoke之外,.NET在很多類中提供了異步的方法,

如System.Net.HttpWebRequest類的BeginGetResponse和EndGetResponse方法,

這里不再一一列舉了,使用方法和上面的示例類似。

4. async/await

.NET5.0以后,讓異步編程變得更加簡單了,我們介紹一下async和await。

它讓我們編寫異步程序變得和同步一樣簡單,不但減少了代碼量,而且不會因為異步讓我們程序邏輯被打亂。

4.1異步方法

下面使用async和await關鍵字來創建一個異步方法,

在第一個方法里調用第二個異步方法,

第二個異步方法中使用了多線程。

聽起來很繞口,不過整個代碼編寫和同步方法沒有什么區別,只是多一個關鍵字。

static void Main(string[] args){    Console.WriteLine("主線程開始..");    AsyncMethod();    Thread.Sleep(1000);    Console.WriteLine("主線程結束..");    Console.ReadKey();}static async void AsyncMethod(){    Console.WriteLine("開始異步方法");    var result = await MyMethod();    Console.WriteLine("異步方法結束");}static async Task<int> MyMethod(){    for (int i = 0; i < 5; i++)    {        Console.WriteLine("異步執行" + i.ToString() + "..");        await Task.Delay(1000); //模擬耗時操作    }    return 0;}

運行結果如下:

4.2異步事件

下面使用一個WinForm應用程序來測試一下異步事件,我們創建一個同步的Click事件和一個異步的Click事件,先觸發異步,然后緊接著觸發同步,看一下運行結果。

//同步事件PRivate void button2_Click(object sender, EventArgs e){    textBox1.Text += "同步執行開始../r/n";              MyMethodFirst();    textBox1.Text += "同步執行結束../r/n";          }//同事事件調用方法int MyMethodFirst(){    for (int i = 0; i < 5; i++)    {        textBox1.Text += "同步執行" + i.ToString() + "../r/n";                   }    return 0;}//異步事件private async  void button3_Click(object sender, EventArgs e){    textBox1.Text += "異步執行開始..====/r/n";    await MyMethodSencond();    textBox1.Text += "異步執行結束..====/r/n";     }//異步事件調用方法async Task<int> MyMethodSencond(){    for (int i = 0; i < 5; i++)    {        textBox1.Text += "異步執行" + i.ToString() +" ..====/r/n";                  await Task.Delay(1000); //模擬耗時操作    }    return 0;}

運行結果如下:

5. 本節要點

A.使用傳統方法BeginInvoke/EndInvoke來實現異步

B.使用async/await創建異步方法和事件

==============================================================================================

返回目錄

<如果對你有幫助,記得點一下推薦哦,如有有不明白或錯誤之處,請多交流>

<對本系列文章閱讀有困難的朋友,請先看《.net 面向對象編程基礎》>

<轉載聲明:技術需要共享精神,歡迎轉載本博客中的文章,但請注明版權及URL>

.NET 技術交流群:467189533 .NET 程序設計

==============================================================================================


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧亚中文在线| 黑人狂躁日本妞一区二区三区| 国产在线观看精品| 精品国产一区二区三区久久久狼| 精品成人69xx.xyz| 国产日韩欧美另类| 亚洲女人初尝黑人巨大| 国产精品视频永久免费播放| 欧美色xxxx| 欧美日韩午夜剧场| 成人精品久久一区二区三区| 另类图片亚洲另类| 中文字幕久热精品在线视频| 国产欧美日韩综合精品| 亚洲美女av电影| 午夜精品一区二区三区视频免费看| 国产中文字幕91| 国模视频一区二区三区| 久久久av亚洲男天堂| 久久久精品国产亚洲| 成人网址在线观看| 亚洲美女www午夜| 在线观看国产精品日韩av| 欧美在线视频在线播放完整版免费观看| 亚洲色图色老头| 欧美黑人巨大精品一区二区| 亚洲视频日韩精品| 在线观看日韩欧美| 中日韩美女免费视频网址在线观看| 精品亚洲男同gayvideo网站| 超碰精品一区二区三区乱码| 亚洲一区二区中文字幕| 92国产精品视频| 亚洲图片欧美午夜| 亚洲国产一区自拍| 国产v综合ⅴ日韩v欧美大片| 91中文在线视频| 成人日韩av在线| 岛国视频午夜一区免费在线观看| 亚洲精品网站在线播放gif| 一区二区三区精品99久久| 午夜精品久久久久久99热软件| 原创国产精品91| 国产欧洲精品视频| 日韩成人中文电影| 欧美另类极品videosbest最新版本| 久久国产精品影片| 亚洲一区精品电影| 中文字幕无线精品亚洲乱码一区| 亚洲精品永久免费精品| 久久电影一区二区| 国产在线观看不卡| 91高清视频免费| 国产精品女人久久久久久| 国产欧美最新羞羞视频在线观看| 欧美成年人视频| 日韩中文字幕在线| 亚洲男女性事视频| 久久午夜a级毛片| 亚洲人成网站777色婷婷| 精品性高朝久久久久久久| 亚洲人免费视频| 久久人人爽国产| 欧美大尺度激情区在线播放| 国产视频欧美视频| 日韩在线观看免费av| 国产日本欧美一区二区三区| 国产成人精品优优av| 久久理论片午夜琪琪电影网| 国产欧美日韩综合精品| 日韩免费在线电影| 国产一区av在线| 欧美日韩久久久久| 亚洲女人初尝黑人巨大| 国产欧美一区二区三区久久| 欧洲美女7788成人免费视频| 国语自产精品视频在线看| 正在播放欧美视频| 欧美性视频精品| 欧美大人香蕉在线| 久久久精品欧美| 亚洲欧洲av一区二区| 国产成人在线一区| 亚洲天堂av网| 日产日韩在线亚洲欧美| 高清日韩电视剧大全免费播放在线观看| 亚洲免费电影在线观看| 亚洲国产精品一区二区久| 日韩精品中文字幕在线播放| 久久久伊人日本| 亚洲人成77777在线观看网| 欧美日韩激情小视频| 伊人久久大香线蕉av一区二区| 4k岛国日韩精品**专区| 久久久精品国产一区二区| 亚洲国产又黄又爽女人高潮的| 日韩成人在线观看| 美女福利视频一区| 国产香蕉一区二区三区在线视频| 2019亚洲男人天堂| 欧美猛交免费看| 91sao在线观看国产| 国产91ⅴ在线精品免费观看| 欧美成人精品一区| 久操成人在线视频| 日本成人在线视频网址| 欧美体内谢she精2性欧美| 久久精品99久久久久久久久| 97香蕉久久超级碰碰高清版| 国产精品日韩一区| 日韩av不卡在线| 国产欧美日韩免费看aⅴ视频| 91精品国产高清自在线看超| 欧美成人精品三级在线观看| 91高清免费在线观看| 欧美福利在线观看| 久久久噜噜噜久噜久久| 亚洲欧美国产另类| 亚洲女人被黑人巨大进入al| 亚洲欧美国产制服动漫| 亚洲国产中文字幕在线观看| 欧美日韩中国免费专区在线看| 久久综合免费视频影院| 在线一区二区日韩| 91理论片午午论夜理片久久| 伊人久久久久久久久久| 麻豆乱码国产一区二区三区| 92福利视频午夜1000合集在线观看| 久久久久久尹人网香蕉| 久久免费视频这里只有精品| 日韩中文字幕视频在线| 久久精品欧美视频| 在线播放国产一区二区三区| 国产91精品网站| 91tv亚洲精品香蕉国产一区7ujn| 欧美性生活大片免费观看网址| 亚洲电影免费观看高清完整版在线| 国产亚洲a∨片在线观看| 欧美高清视频在线观看| 精品久久久久久| 国产精品99久久久久久久久| 国产亚洲精品美女| 久久久久久久久久亚洲| 国产精品美女在线观看| 国产精品亚洲美女av网站| 国产精品com| 欧美日韩国产一区在线| 国产精品亚洲片夜色在线| 成人免费视频网| 人人做人人澡人人爽欧美| 国产91av在线| 91黑丝高跟在线| 亚洲毛片在线观看| 久久精品久久久久久| 日本中文字幕不卡免费| 国产成人综合精品| 成人黄色激情网| 国产精品扒开腿爽爽爽视频| 亚洲综合大片69999| 国产91精品久久久久久久| 日本精品一区二区三区在线播放视频| 亚洲欧洲日产国码av系列天堂| 日韩高清不卡av| 97久久伊人激情网|