乱码乱a∨中文字幕,在线免费激情视频,亚洲欧美久久夜夜潮,国产在线网址

  1. <sub id="hjl7n"></sub>

    1. <sub id="hjl7n"></sub>

      <legend id="hjl7n"></legend>

      當前位置:首頁 >  站長 >  編程技術 >  正文

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

       2020-10-29 13:56  來源: 腳本之家   我來投稿 撤稿糾錯

        阿里云優(yōu)惠券 先領券再下單

      這篇文章主要介紹了ASP.Net中的async+await異步編程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

      在.NET Framework4.5框架、C#5.0語法中,通過async和await兩個關鍵字,引入了一種新的基于任務的異步編程模型(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”用來標記一個方法為異步方法,異步方法體內需結合“await”關鍵字使用,如果沒有await,則該方法等同于一個普通方法。異步方法命名規(guī)則通常以Async結尾。

      2.“await”關鍵字只能在異步方法中使用。

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

      4.異步方法的調用者獲得控制權之后:

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

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

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

      static void Main(string[] args)
          {
            Console.WriteLine("執(zhí)行前Main.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟①
            GetResultAsync();
            Console.WriteLine("執(zhí)行結束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í)行結束GetResult.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟④
            return 10;
          }

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

      結果分析:

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

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

       

      場景2:異步方法體內遇到await之后,立即將控制權轉到調用者手中

      static void Main(string[] args)
          {
            Console.WriteLine("執(zhí)行前Main.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟①       GetResultAsync();
            Console.WriteLine("執(zhí)行結束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í)行結束GetResult.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟④
            return 10;
          }

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

      結果分析:

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

      1)阻塞了當前異步方法并立即將控制權轉交給調用者主函數(shù)Main

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

      場景3:異步方法體內遇到await之后,立即將控制權轉到調用者手中,調用者需等待異步方法返回結果

      static void Main(string[] args)
          {
            Console.WriteLine("執(zhí)行前Main.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟①
            Task<int> res = GetResultAsync();
            Console.WriteLine("執(zhí)行結束Main....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟②
            Console.WriteLine("執(zhí)行結果:" + 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í)行結束GetResult.....線程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());//步驟⑤
            return 10;
          }

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

      結果分析:

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

      1)阻塞了當前異步方法并立即將控制權轉交給調用者主函數(shù)Main

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

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

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

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

      來源:腳本之家

      鏈接:https://www.jb51.net/article/193915.htm

      申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

      相關文章

      熱門排行

      信息推薦