C# Async與Await的使用

這個是.NET 4.5的特性,所以要求最低.NET版本爲4.5。

看很多朋友還是使用的Thread來使用異步多線程操作,基本上看不見有使用Async、Await進行異步編程的。各有所愛吧,其實都可以。只要正確使用就行,不過還是寫了這篇文章推薦大家使用Async、Await。 原因就是:可以跟寫同步方法一樣去異步編程。代碼則就非常的清晰,就跟寫普通的代碼一樣,不用關係如何去異步編程,也讓很多初級程序員也能夠異步編程了。下面是一個使用Thread 多線程實現的異步例子,以及一個使用Async與Await的異步例子,接下來我們再簡單理解下Async與Await的相關技術說明。

Thread多線程異步編程例子

  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         Console.WriteLine("主線程測試開始..");
  6.         Thread th = new Thread(ThMethod);
  7.         th.Start();
  8.         Thread.Sleep(1000);
  9.         Console.WriteLine("主線程測試結束..");
  10.         Console.ReadLine();
  11.     }
  12.  
  13.  
  14.     static void ThMethod()
  15.     {
  16.         Console.WriteLine("異步執行開始");
  17.         for (int i = 0; i < 5; i++)
  18.         {
  19.             Console.WriteLine("異步執行" + i.ToString() + "..");
  20.             Thread.Sleep(1000);
  21.         }
  22.         Console.WriteLine("異步執行完成");
  23.     }
  24. }

以上代碼運行效果如下圖


 

使用Async與Await進行異步編程

  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         Console.WriteLine("主線程測試開始..");
  6.         AsyncMethod();
  7.         Thread.Sleep(1000);
  8.         Console.WriteLine("主線程測試結束..");
  9.         Console.ReadLine();
  10.     }
  11.  
  12.     static async void AsyncMethod()
  13.     {
  14.         Console.WriteLine("開始異步代碼");
  15.         var result = await MyMethod();
  16.         Console.WriteLine("異步代碼執行完畢");
  17.     }
  18.  
  19.     static async Task<int> MyMethod()
  20.     {
  21.         for (int i = 0; i < 5; i++)
  22.         {
  23.             Console.WriteLine("異步執行" + i.ToString() + "..");
  24.             await Task.Delay(1000); //模擬耗時操作
  25.         }
  26.         return 0;
  27.     }
  28. }

運行效果:


顯而易見我們就跟寫同步方法一樣,完成了異步方法的編寫,代碼更清晰了。

只有擁有async才能在其內部使用await關鍵字。異步方法可以具有Task、Task<>或void的返回類型;

await關鍵字則是用於返回值是“可等待”類型(awaitable)的方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章