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

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

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

      異步CTP(Async CTP)為什么那樣工作?

      對異步CTP感興趣有很多原因。異步CTP使異步編程比以前更加容易了。它雖然沒有Rx強大,但是更容易學。異步CTP介紹了兩個新的關鍵字,async和await。異步方法(或Lambda表達式)必須返回void,Task或Task<TResult>。這篇文章不是介紹異步CTP的,因為網上有很多這樣的文章。這篇文章的目的是把程序員開始使用Async CTP遇到的一些常見問題集中起來。

      推斷返回類型

      當從異步方法返回一個值的時候,此方法體直接返回這個值,但該方法本身被聲明為返回一個Task<TResult>。當聲明一個返回甲類型的方法卻必須返回一個乙類型時,就有點“斷連”了。

      // 實際語法
      public async Task<int> GetValue()
      {
        await TaskEx.Delay(100);
        return 13; //返回類型是 "int", 而不是"Task<int>"
      }

       

      問題來了:為什么我不能這么寫?

      // 假想語法
      public async int GetValue()
      {
        await TaskEx.Delay(100);
        return 13; // 返回類型是 "int"
      }

       

      思考:該方法如何如何照顧調用者呢?異步方法必須返回一個實際結果類型Task<TResult>的值。因此,GetValue方法會出現返回Task<TResult>的智能提示(在對象瀏覽器,Reflector等中也是這樣的)。
       
      在設計之初,推斷返回類型已經被考慮到了,但該設計團隊已經推斷出在異步方法中保持這種“斷連”比在代碼基上擴大這種“斷連”更好。如今這種“斷連”仍存在,但比以前更小了。該設計團隊的共識是一致的方法簽名更佳。
      思考:async void 和async Task有什么區別?
      一個async Task方法就像任何其他的異步操作一樣,只是沒有返回值。一個async void方法扮演一種高級操作。async Task方法可能被組合進其他使用using await的異步方法。async void方法可能被用作一個事件句柄。async void方法也有其他重要的屬性:在ASP.NET上下文中,它通知web服務器直到它返回,頁面才完成。
       
      推斷返回類型會移除async void 和async Task間的區別:要么所有的異步方法是async void(阻止可組合性),要么都是async Task(阻止它們來自事件句柄,同時對ASP.NET要有一個可選擇的方案)。

       異步返回

       
      在方法聲明返回類型和方法體返回的類型之間仍有“斷連”。該設計團隊的另一個建議是:給return添加一個關鍵字來指示return返回的值,但這個也確實沒有返回什么,如下所示:
      // 假想語法
      public async Task<int> GetValue()
      {
        await TaskEx.Delay(100);
        async return 13; // "async return" 意味著值被包裝在Task中
      }

       

      思考:將大量的代碼從同步轉為異步。

      async return關鍵字也被考慮到了,但并沒有足夠的說服力。當把一些同步代碼轉成異步代碼時,這尤其正確。強制人們給每個return語句添加asynchronous就好像是“不必要的忙碌”。比較而言,習慣于“斷連”更容易。

      推斷“async”

      async關鍵字必須用在使用了await關鍵字的方法上。然而,如果把async用在了一個沒有使用await的方法上,也會收到一個警告。

      問題:為什么async不能根據await的存在推斷出來?

      //假想語法
      public Task<int> GetValue()
      {
        // "await" 的存在暗示這是一個 "async" 方法.
        await TaskEx.Delay(100);
        return 13;
      }

      思考:向后兼容性和代碼可讀性

      單字的await關鍵字具有太大的打破變化。在異步方法上的多字await(如await for)或一個關鍵字之間的選擇,只是在那個方法內部啟用await關鍵字。很明顯,使用async標記方法讓人類和計算機分析起來更容易,因此設計團隊決定使用async/await對。

      推斷“await”

      問題:既然顯示包括async有意義(看上面),為什么await不能根據async的存在推斷出來呢?

      // 假想語法
      public async Task<int> GetValue()
      {
        // 暗示有"await",因為這是一個 "async" 方法.
        TaskEx.Delay(100);
        return 13;
      }

      思考:異步操作的并行組合。

      乍一看,推斷await推斷似乎簡化了基本的異步操作。只要所有的等待可以按序列(如一個操作等待,然后另一個,再然后另一個)完成,這個就能很好的工作。然而,當有人考慮并行組合的時候,它崩潰了。

      異步CTP中的并行組合使用TaskEx.WhenAny 和TaskEx.WhenAll方法。這有一個簡單的例子,這個方法立即開始了兩個操作,并且等待它們完成。

      // 實際語法
      public async Task<int> GetValue()
      {
        // 異步檢索兩個部分的值
        // 注意此時它們是沒有等待的“not await”
        Task<int> part1 = GetValuePart1();
        Task<int> part2 = GetValuePart2();
      
        // 等待它們的值到達。
        await TaskEx.WhenAll(part1, part2);
      
        // 計算我們的結果
        int value1 = await part1; // 實際上沒有等待
        int value2 = await part2; //實際上沒有等待
        return value1 + value2;
      }

      為了處理并行組合,我們必須有能力說我們將不會await一個表達式。

      posted @ 2015-09-26 11:38  tkbSimplest  閱讀(1937)  評論(8)    收藏  舉報
      主站蜘蛛池模板: 亚洲免费成人av一区| 久在线精品视频线观看| 91精品国产老熟女在线| 最新国产精品拍自在线播放| 国内精品自线在拍| 激情综合色综合啪啪开心| 真人性囗交视频| 亚洲国产另类久久久精品小说| 日韩精品毛片一区到三区| 九九热在线免费视频精品| 欧美 亚洲 日韩 在线综合| 亚洲欧美综合中文| 一本久久a久久精品综合| 久久精品国产99国产精品严洲| 国产94在线 | 亚洲| 亚洲精品乱码免费精品乱| 国产精品剧情亚洲二区| 熟妇好大好深好满好爽| 亚洲人精品午夜射精日韩| 亚洲理论在线A中文字幕| 欧美疯狂xxxxxbbbbb| 国产粉嫩区一区二区三区| 四虎影视一区二区精品| 乌克兰美女浓毛bbw| 男女做aj视频免费的网站| 国内精品无码一区二区三区| 国产精品欧美福利久久| 视频免费完整版在线播放| 欧美福利电影A在线播放| 泰和县| 自拍偷自拍亚洲精品播放 | 中文字幕人妻少妇引诱隔壁| 国产精品自拍自在线播放| 蜜臀久久精品亚洲一区| 国产露脸无套对白在线播放| 韩国午夜理伦三级| 色呦呦 国产精品| 免费 黄 色 人成 视频 在 线| 国产一级黄色片在线观看| 亚洲天堂视频网| 欧美大bbbb流白水|