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