Notes about new feature, async & await on .NET 4.5
新的.NET 4.5的await/async的東西。如果不加await,function會被執行(如果是 xxAsync的function就會在背景做它的事, 然後程式會馬上可以走到下一行) , 但是無法知道它成功與否或是return值。Example:
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
// You can do work here that doesn't rely on the string from GetStringAsync.
DoIndependentWork();
string urlContents = await getStringTask;
int x =5;
上面的可以合寫成一句 string urlContents = await client.GetStringAsync("http://msdn.microsoft.com");
` await的意義就是
- 取回task完成後的return 值.
- 遇到await會block在那邊. 程式會馬上返回,亦即若是有個
function X
包含上面的code,則等同於X馬上return掉。 - 使用function X的caller已完成執行後,await本身跟下面的code
int x =5
會跳回去被執行. 預設使用同一Thread執行。
–
Notes:
- 若要解決同一thread的資源問題. 可以用 await Task.run(…) background thread
function X
需要加async,因為它內部有用到string urlContents = await getStringTask;
- 如果
function X
沒有return值,即async void type
,使用function X
時不需await function X
.
–
參考:
使用 Async 和 Await 設計非同步程式 (C# 和 Visual Basic) http://msdn.microsoft.com/zh-tw/library/hh191443.ASPX#BKMK_AsyncandAwait
async (C# Reference) http://msdn.microsoft.com/zh-tw/library/hh156513.ASPX
非同步方法的傳回類型 (C# and Visual Basic) http://msdn.microsoft.com/zh-tw/library/hh524395.ASPX
Leave a Comment