任務Task系列之異步編程(async and await)
阿新 • • 發佈:2018-08-01
bubuko 是我 sum 我們 and 方法 () var args
異步:異步操作通常用於執行完成時間可能較長的任務,如打開大文件、連接遠程計算機或查詢數據庫=異步操作在主應用程序線程以外的線程中執行。應用程序調用方法異步執行某個操作時,應用程序可在異步方法執行其任務時繼續執行。
異步與多線程的關系:我們已經知道, 異步和多線程並不是一個同等關系,異步是最終目的,多線程只是我們實現異步的一種手段。異步是當一個調用請求發送給被調用者,而調用者不用等待其結果的返回而可以做其它的事情。實現異步可以采用多線程技術或則交給另外的進程來處理。簡單的說就是:異步線程是由線程池負責管理,而多線程,我們可以自己控制,當然在多線程中我們也可以使用線程池。
異步示例:
1static 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 vart2 = 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)