1. 程式人生 > >C#多執行緒程式設計筆記(5.2)-在lambda表示式中使用await操作符

C#多執行緒程式設計筆記(5.2)-在lambda表示式中使用await操作符

近來在學習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#編譯器自動產生一個任務並返回給我們。