程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> C# 5.0 異步編程,

C# 5.0 異步編程,

編輯:關於.NET

C# 5.0 異步編程,


在C#5.0中,增加了一個強大的新功能--異步編程。( .NET FrameWork4.5  版本)

它以兩個新型關鍵字出現:

  • ·async
  • ·await

1、Async方法有三種返回類型:

  • async void :是一個“觸發並忘記”的異步操作,最常見的應用場景是在async代碼和其他代碼的邊界情況,比如UI事件處理必須返回void。

調用者不能等待任何返回結果,並且不能知道操作什麼時候結束或者是否成功。

當你確定你不需要知道操作何時結束或者是否成功時,你應該使用void。

return statement只需要return;,並且是可選擇。(不寫也行)

  • async Task:允許調用者等待操作結束的結果,並且傳遞在異步代碼執行期間的異常。

當我們不需要任何返回類值時,一個async Task方法比async void方法更好,因為他允許調用者使用await去等待,並且處理異常更容易。

return statement只需要return;,並且是可選擇的。(不寫也行)

  • async Task<T>:例如Task<string>,通常用於異步操作需要返回值的時候。

return必須有一個T類型的表達式,比如5+x,並且必須出現在方法所有路徑的最後。

2、await try中可以使用,但不能在catch和finally中使用,我們可以通過以下方式解決

  bool failed = false;
try
{
   page = await webClient.DownloadStringTaskAsync("http://oreilly.com");
}
catch (WebException)
{
   failed = true;
}
if (failed)
{
   page = await webClient.DownloadStringTaskAsync("http://oreillymirror.com");
}

3、Async lambda表達式

C#是在大多數位置是不允許在Query表達式中使用await關鍵字的。是因為這些位置會被編譯成lambda表達式,正因為如此,該lambda表達式需要標記為async關鍵字。

我們可以將他們轉換,如下

IEnumerable<int> transformed = from x in alexsInts
where x != 9
select x + 2;

通過使用Linq內部帶的拓展方法。然後lambda表達式變得明了可讀,繼而你也就可以標記他們為async,從而使用await了。

IEnumerable<Task<int>> tasks = alexsInts
.Where(x => x != 9)
.Select(async x => await DoSomthingAsync(x) + await DoSomthingElseAsync(x));
IEnumerable<int> transformed = await Task.WhenAll(tasks);

 參考:中文轉載 http://www.cnblogs.com/tdws/p/5617242.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved