Skip to content

C# 多线程 05-使用 C#6.0 02-在 lambda 表达式中使用 await 操作符

🏷️ 《C# 多线程》

在 lambda 表达式中使用 await 操作符

csharp
/// <summary>
/// 在 lambda 表达式中使用 await 操作符
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
    // 由于不能在 main 方法中使用 async,所以将异步函数移到了 AsynchronousProcessing 方法中
    Task t = AsynchronousProcessing();
    t.Wait();

    Console.ReadLine();
}

static async Task AsynchronousProcessing()
{
    // 由于任何 lambda 表达式的类型都不能通过 lambda 自身来推断,
    // 所以不得不显式向C#编译器指定它的类型
    // 这里 lambda 的参数类型为 string,返回值类型为 Task<string>
    // lambda 表达式中虽然只返回了一个 string,但是因为使用 async 操作符,会自动封装成 Task<string>
    Func<string, Task<string>> asyncLambda = async name =>
    {
        await Task.Delay(TimeSpan.FromSeconds(2));
        return $"Task {name} is running on a thread id {Thread.CurrentThread.ManagedThreadId}. " +
        $"Is thread pool thread:{Thread.CurrentThread.IsThreadPoolThread}";
    };

    // 使用 await 操作符获取异步操作的返回值
    string result = await asyncLambda("async lambda");
    Console.WriteLine(result);
}

打印结果

txt
Task async lambda is running on a thread id 4. Is thread pool thread:True