最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.Net中的async+await異步編程的實現(xiàn)

 更新時間:2020年08月23日 11:28:54   作者:跳躍的鍵盤手  
這篇文章主要介紹了ASP.Net中的async+await異步編程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在.NET Framework4.5框架、C#5.0語法中,通過async和await兩個關(guān)鍵字,引入了一種新的基于任務的異步編程模型(TAP)。在這種方式下,可以通過類似同步方式編寫異步代碼,極大簡化了異步編程模型。

用法:

public async Task<int> GetDotNetCountAsync()
{
  // Suspends GetDotNetCount() to allow the caller (the web server)
  // to accept another request, rather than blocking on this one.
  var html = await _httpClient.GetStringAsync("https://dotnetfoundation.org");

  return Regex.Matches(html, @"\.NET").Count;
}

要點?。?!

1.“async”用來標記一個方法為異步方法,異步方法體內(nèi)需結(jié)合“await”關(guān)鍵字使用,如果沒有await,則該方法等同于一個普通方法。異步方法命名規(guī)則通常以Async結(jié)尾。

2.“await”關(guān)鍵字只能在異步方法中使用。

3.當在async異步方法中遇到await操作時,await會阻塞該異步方法不繼續(xù)往下執(zhí)行,并將該異步方掛起,將控制權(quán)轉(zhuǎn)到該異步方法的調(diào)用者手中。

4.異步方法的調(diào)用者獲得控制權(quán)之后:

1)如果調(diào)用者需要使用異步方法的返回結(jié)果,則繼續(xù)等待異步方法執(zhí)行完畢,再繼續(xù)往下執(zhí)行。

2)如果調(diào)用者不關(guān)心異步方法的返回結(jié)果,則繼續(xù)往下執(zhí)行。

場景一:async方法中未使用await

static void Main(string[] args)
    {
      Console.WriteLine("執(zhí)行前Main.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟①
      GetResultAsync();
      Console.WriteLine("執(zhí)行結(jié)束Main....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟②
      Console.ReadKey();
    }

 
    async static Task<int> GetResultAsync()
    {
      Console.WriteLine("執(zhí)行前GetResult.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟③      Task.Delay(3000).Wait();
      Console.WriteLine("執(zhí)行結(jié)束GetResult.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟④
      return 10;
    }

執(zhí)行結(jié)果:步驟① ——>步驟③——>步驟④——>步驟②

結(jié)果分析:

我們會發(fā)現(xiàn),主函數(shù)Main調(diào)用異步方法GetResultAsync時,由于異步方法缺少“await”關(guān)鍵字,主函數(shù)需等異步方法步驟3,4全部執(zhí)行結(jié)束后再繼續(xù)執(zhí)行步驟2,執(zhí)行順序完全和同步方法執(zhí)行順序一致;

并且異步方法會給出語法提示:缺少“await”關(guān)鍵字

場景2:異步方法體內(nèi)遇到await之后,立即將控制權(quán)轉(zhuǎn)到調(diào)用者手中

static void Main(string[] args)
    {
      Console.WriteLine("執(zhí)行前Main.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟①       GetResultAsync();
      Console.WriteLine("執(zhí)行結(jié)束Main....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟②
      Console.ReadKey();
    }
    async static Task<int> GetResultAsync()
    {
      Console.WriteLine("執(zhí)行前GetResult.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟③
      await Task.Delay(3000);
      Console.WriteLine("執(zhí)行結(jié)束GetResult.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟④
      return 10;
    }

執(zhí)行結(jié)果:步驟① ——>步驟③——>步驟②——>步驟④

結(jié)果分析:

我們會發(fā)現(xiàn),主函數(shù)Main調(diào)用異步方法GetResultAsync,在遇到異步方法中“await”關(guān)鍵字時

1)阻塞了當前異步方法并立即將控制權(quán)轉(zhuǎn)交給調(diào)用者主函數(shù)Main

2)主函數(shù)獲得控制權(quán)后繼續(xù)執(zhí)行方法體內(nèi)步驟2,GetResultAsync方法則異步執(zhí)行(等待異步操作結(jié)束之后執(zhí)行步驟4)。

場景3:異步方法體內(nèi)遇到await之后,立即將控制權(quán)轉(zhuǎn)到調(diào)用者手中,調(diào)用者需等待異步方法返回結(jié)果

static void Main(string[] args)
    {
      Console.WriteLine("執(zhí)行前Main.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟①
      Task<int> res = GetResultAsync();
      Console.WriteLine("執(zhí)行結(jié)束Main....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟②
      Console.WriteLine("執(zhí)行結(jié)果:" + res.Result + "....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟③
      Console.ReadKey();
    }
    async static Task<int> GetResultAsync()
    {
      Console.WriteLine("執(zhí)行前GetResult.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟④
      await Task.Delay(3000);
      Console.WriteLine("執(zhí)行結(jié)束GetResult.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟⑤
      return 10;
    }

執(zhí)行結(jié)果:步驟① ——>步驟④——>步驟②——>步驟⑤——>步驟③

結(jié)果分析:

我們會發(fā)現(xiàn),主函數(shù)Main調(diào)用異步方法GetResultAsync,在遇到異步方法中“await”關(guān)鍵字時

1)阻塞了當前異步方法并立即將控制權(quán)轉(zhuǎn)交給調(diào)用者主函數(shù)Main

2)主函數(shù)獲得控制權(quán)后繼續(xù)執(zhí)行方法體內(nèi)步驟2和步驟3,GetResultAsync方法則異步執(zhí)行。

3)當主函數(shù)執(zhí)行步驟3時,由于步驟3需要打印異步方法的返回結(jié)果,故需要等待異步方法結(jié)束才能繼續(xù)。所以需先執(zhí)行步驟5,然后再繼續(xù)執(zhí)行步驟3。

最后,異步編程的時候我們通常會結(jié)合Task來使用

到此這篇關(guān)于ASP.Net中的async+await異步編程的實現(xiàn)的文章就介紹到這了,更多相關(guān)ASP.Net async+await異步編程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • .net實現(xiàn)動態(tài)驗證碼功能

    .net實現(xiàn)動態(tài)驗證碼功能

    這篇文章主要介紹了.net實現(xiàn)動態(tài)驗證碼功能,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • ASP.NET?Core的日志系統(tǒng)介紹

    ASP.NET?Core的日志系統(tǒng)介紹

    這篇文章介紹了ASP.NET?Core的日志系統(tǒng),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • .net等比縮放生成縮略圖的方法

    .net等比縮放生成縮略圖的方法

    本文給大家匯總了2個C#中等比縮放實現(xiàn)生成縮略圖的方法,第一種稍微簡單些,第二種是本人常用的方法,這里推薦給大家,有需要的小伙伴可以參考下。
    2015-11-11
  • ASP.NET MVC基礎

    ASP.NET MVC基礎

    這篇文章主要介紹了ASP.NET MVC基礎概念、MVC三大組件之間的相互關(guān)系、以及asp.net webform模型和ASP.NET MVC模型的關(guān)系等基礎知識,是我們學習MVC必不可少的知識點,希望對大家能有所幫助
    2014-10-10
  • asp.net Excel轉(zhuǎn)換為SQL Server的方法

    asp.net Excel轉(zhuǎn)換為SQL Server的方法

    辦公軟件Excel是一種常用的電子表格軟件,在編程項目中有需要將Excel轉(zhuǎn)換為SQL Server數(shù)據(jù)庫的需求,本文對此進行一些介紹并給出設計代碼。
    2009-06-06
  • asp.net上傳execl文件后,在頁面上加載顯示(示例代碼)

    asp.net上傳execl文件后,在頁面上加載顯示(示例代碼)

    本篇文章主要是對asp.net上傳execl文件后,在頁面上加載顯示(示例代碼)進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • asp.net實現(xiàn)的DES加密解密操作示例

    asp.net實現(xiàn)的DES加密解密操作示例

    這篇文章主要介紹了asp.net實現(xiàn)的DES加密解密操作,結(jié)合具體實例形式分析了asp.net實現(xiàn)DES加密與解密算法的實現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • ASP.NET Core中使用LazyCache的全過程

    ASP.NET Core中使用LazyCache的全過程

    這篇文章主要給大家介紹了關(guān)于ASP.NET Core中使用LazyCache的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • asp.net運行原理 詳解

    asp.net運行原理 詳解

    當我們通過瀏覽器向ASP.NET 2.0網(wǎng)站的一個asp.net頁面發(fā)起請求時,在服務器端首先是IIS收到請求,IIS一看是asp.net頁面,心里很開心,因為這個請求不用它處理,交給ASP.NET ISAPI就行了
    2012-04-04
  • 國產(chǎn)化之銀河麒麟安裝.NetCore包管理器方式(步驟詳解)

    國產(chǎn)化之銀河麒麟安裝.NetCore包管理器方式(步驟詳解)

    這篇文章主要介紹了國產(chǎn)化之銀河麒麟安裝.NetCore-包管理器方式,本文給大家分享安裝步驟及安裝命令,對銀河麒麟安裝.NetCore相關(guān)知識感興趣的朋友一起看看吧
    2022-03-03

最新評論

全州县| 阿拉善右旗| 二连浩特市| 广饶县| 馆陶县| 孝感市| 南丹县| 吴堡县| 五峰| 宝坻区| 石楼县| 教育| 绥江县| 沁源县| 西华县| 宣城市| 万宁市| 沭阳县| 吉木萨尔县| 唐山市| 平武县| 敦化市| 贺州市| 太白县| 林周县| 沙河市| 邯郸市| 鲜城| 陵川县| 宜兰市| 公主岭市| 桃源县| 山丹县| 沽源县| 类乌齐县| 龙海市| 郴州市| 平湖市| 民县| 隆尧县| 电白县|