1. 程式人生 > >任務Task系列之異步編程(async and await)

任務Task系列之異步編程(async and await)

bubuko 是我 sum 我們 and 方法 () var args

  異步:異步操作通常用於執行完成時間可能較長的任務,如打開大文件、連接遠程計算機或查詢數據庫=異步操作在主應用程序線程以外的線程中執行。應用程序調用方法異步執行某個操作時,應用程序可在異步方法執行其任務時繼續執行。

  異步與多線程的關系:我們已經知道, 異步和多線程並不是一個同等關系,異步是最終目的,多線程只是我們實現異步的一種手段。異步是當一個調用請求發送給被調用者,而調用者不用等待其結果的返回而可以做其它的事情。實現異步可以采用多線程技術或則交給另外的進程來處理。簡單的說就是:異步線程是由線程池負責管理,而多線程,我們可以自己控制,當然在多線程中我們也可以使用線程池。

  異步示例:

 1
static void Main(string[] args) 2 { 3 Console.WriteLine(SumValue().Result); 4 Console.ReadLine(); 5 } 6 7 static async Task<Int32> SumValue() 8 { 9 Int32 result = 0; 10 var t1 = NumValue(50); 11 var
t2 = NumValue(100); 12 result = await t1 + await t2; 13 return result; 14 } 15 static async Task<Int32> NumValue(Int32 n) 16 { 17 Int32 sum = 0; 18 await Task.Run(() => { 19 for (int i = 0; i < n; i++) 20
{ 21 sum += i; 22 } 23 }); 24 return sum; 25 }

  運行結果:

  技術分享圖片

  註意:

  • 凡是使用await關鍵字的方法,都必須打上async標記。
  • async表示方法內有異步方法,調用async方法,會立刻另起線程執行。
  • await只是顯示等待線程結束。await表示等待異步方法執行完,並取返回值。

任務Task系列之異步編程(async and await)