<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Task 異步小技巧

      原文地址:Task 異步小技巧 - 一事冇誠 - 博客園 (cnblogs.com)

      async Task 語法糖出來后,異步編程變得非常簡單,適合需要耗費較長時間的任務。

      有些小伙伴使用后可能會非常疑惑,使用異步和同步,在耗時上幾乎沒有差別。

      下面我們看一個例子,場景是需要調用多個第三方的WebApi,分別是獲取名稱、年齡、性別,由于網絡環境等原因,api響應時間可能會接近1秒

       1 public async Task Test()
       2 {
       3     var sw = new Stopwatch();
       4     sw.Start();
       5 
       6     var userName = await GetUserNameAsync();
       7     var userAge = await GetUserAgeAsync();
       8     var userSex = await GetUserSexAsync();
       9 
      10     sw.Stop();
      11     var ts = sw.Elapsed;
      12     Console.WriteLine($"總共耗時:{ts.TotalMilliseconds}ms");
      13 }
      14 
      15 private async Task<string> GetUserNameAsync()
      16 {
      17     await Task.Delay(500);
      18     return "小明";
      19 }
      20 
      21 private async Task<string> GetUserAgeAsync()
      22 {
      23     await Task.Delay(800);
      24     return "11";
      25 }
      26 
      27 private async Task<string> GetUserSexAsync()
      28 {
      29     await Task.Delay(900);
      30     return "11";
      31 }

      運行后發現,這個時間2秒多,這用戶體驗肯定是無法忍受的

       導致這樣結果的原因是每次進行異步調用的時候,都在異步函數前加上了 await ,對于單單這個過程來說,其實相當于同步,等待直到結果返回,每個異步函數都await,時間自然就疊加了,為了解決這個問題,使用一個小技巧,可以將代碼改成下面這樣

       1 public async Task Test()
       2 {
       3     var sw = new Stopwatch();
       4     sw.Start();
       5 
       6     var userNameTask =  GetUserNameAsync();
       7     var userAgeTask =  GetUserAgeAsync();
       8     var userSexTask =  GetUserSexAsync();
       9 
      10     var userName = await userNameTask;
      11     var userAge = await userAgeTask;
      12     var userSex = await userSexTask;
      13 
      14     sw.Stop();
      15     var ts = sw.Elapsed;
      16     Console.WriteLine($"總共耗時:{ts.TotalMilliseconds}ms");
      17 }
      18 
      19 private async Task<string> GetUserNameAsync()
      20 {
      21     await Task.Delay(500);
      22     return "小明";
      23 }
      24 
      25 private async Task<string> GetUserAgeAsync()
      26 {
      27     await Task.Delay(800);
      28     return "11";
      29 }
      30 
      31 private async Task<string> GetUserSexAsync()
      32 {
      33     await Task.Delay(900);
      34     return "11";
      35 }

      這次運行的總耗時,就是3個異步中,耗時最長那個 GetUserSexAsync

       為什么會這樣呢,這個小技巧的關鍵是這里,當執行到異步函數的時候,不加 await,不進行等待,讓這些任務乖乖在別的線程的執行,當需要用到他們的時候,再去等待返回值,所以時間上不會進行疊加,哪個最長,總耗時就是哪個

      1 var userNameTask =  GetUserNameAsync();
      2 var userAgeTask =  GetUserAgeAsync();
      3 var userSexTask =  GetUserSexAsync();
      4 
      5 var userName = await userNameTask;
      6 var userAge = await userAgeTask;
      7 var userSex = await userSexTask;

       有不對、不好的地方請大佬們指正,我會改正過來,感謝各位大佬

      posted @ 2021-10-15 10:18  一事冇誠  閱讀(5412)  評論(30)    收藏  舉報
      主站蜘蛛池模板: 99久久无码私人网站| 日韩精品卡1卡2日韩在线| 人人妻人人澡人人爽不卡视频| 国产特色一区二区三区视频| 8AV国产精品爽爽ⅤA在线观看| 久久青草国产精品一区| 在厨房拨开内裤进入在线视频| 精品国产熟女一区二区三区 | 国产极品精品自在线不卡| 欧美浓毛大泬视频| 日本不卡码一区二区三区| 欧洲中文字幕一区二区| 久久精品国产福利一区二区| 在线观看视频一区二区三区| 色婷婷亚洲精品综合影院| 99精品国产一区二区三| 国产福利微视频一区二区| 亚洲中文无码手机永久| 亚洲欧美精品综合在线观看| 日本乱码在线看亚洲乱码| 精品无套挺进少妇内谢| 国语精品自产拍在线观看网站| 欧美最新精品videossexohd| 女同精品女同系列在线观看| 国产在线午夜不卡精品影院 | 一区二区三区激情都市| 日韩不卡一区二区在线观看| 国产精品自在拍首页视频8| 精品熟女日韩中文十区| 国产在线欧美日韩精品一区| 最新国产精品中文字幕| 亚洲女同精品久久女同| 午夜福利国产精品视频| 国产福利深夜在线播放| 国产成人亚洲精品狼色在线| 国产精品亚洲А∨天堂免下载| 四虎国产精品永久在线| 亚洲久久色成人一二三区| 成人做爰www网站视频| 日韩精品一区二区三区中文无码| 色综合一本到久久亚洲91|