C#多執行緒程式設計筆記(5.2)-在lambda表示式中使用await操作符
阿新 • • 發佈:2019-01-01
近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^
using System; using System.Threading.Tasks; using System.Threading; namespace 在Lambda表示式中使用await操作符 { class Program { static void Main(string[] args) { Task t = AsyncchronousProcessing(); t.Wait(); Console.ReadKey(); } async static Task AsyncchronousProcessing() { Func<string, Task<string>> asyncLambda = async name => { await Task.Delay(TimeSpan.FromSeconds(2)); return string.Format("Task {0} is running on a thread id {1}.I shtead pool thread: {2}", name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); }; string result = await asyncLambda("async lambda"); Console.WriteLine(result); } } }
程式執行結果如下:
首先,由於不能再Main方法中使用async,我們將非同步函式移到了AsynchronousProcessing方法中。然後使用async關鍵字聲明瞭一個lambda表示式。由於任何lambda表示式的型別都不能通過lambda自身來推斷,所以不得不顯式向C#編譯器指定它的型別。在本例中,該型別說明該lambda表示式接受一個字串引數,並返回一個Task<string>物件。
接著,我們定義了lambda表示式體。有個問題是該方法被定義為返回一個Task<string>物件,但實際上返回的是字串,卻沒有編譯錯誤!這是因為C#編譯器自動產生一個任務並返回給我們。