C# 5.0 異步編程。本站提示廣大學習愛好者:(C# 5.0 異步編程)文章只能為提供參考,不一定能成為您想要的結果。以下是C# 5.0 異步編程正文
在C#5.0中,添加了一個弱小的新功用--異步編程。( .NET FrameWork4.5 版本)
它以兩個新型關鍵字呈現:
1、Async辦法有三種前往類型:
調用者不能等候任何前往後果,並且不能知道操作什麼時分完畢或許能否成功。
當你確定你不需求知道操作何時完畢或許能否成功時,你應該運用void。
return statement只需求return;,並且是可選擇。(不寫也行)
當我們不需求任何前往類值時,一個async Task辦法比async void辦法更好,由於他允許調用者運用await去等候,並且處置異常更容易。
return statement只需求return;,並且是可選擇的。(不寫也行)
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