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#编译器自动产生一个任务并返回给我们。

猜你喜欢

转载自blog.csdn.net/qq_35445058/article/details/80914277