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

C# 5.0 異步編程

編輯:C#入門知識

C# 5.0 異步編程。本站提示廣大學習愛好者:(C# 5.0 異步編程)文章只能為提供參考,不一定能成為您想要的結果。以下是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