gpt4 book ai didi

c# - 了解一行中使用的 Task.Run + Wait() + async + await 的使用

转载 作者:可可西里 更新时间:2023-11-01 08:55:06 24 4
gpt4 key购买 nike

我是 C# 新手,所以我在理解一些概念时遇到了困难,并且遇到了一段我不太理解的代码:

static void Main(string[] args)
{
Task.Run(async () => { await SomeClass.Initiate(new Configuration()); }).Wait();
while (true) ;
}

据我了解,这会运行一个启动方法的任务。此方法运行,然后,一旦完成,就会进入无限循环等待。感觉要么是代码没看懂,要么是我没理解对。

谢谢

最佳答案

你可以把它分成几个部分:

async () => { await SomeClass.Initiate(new Configuration()); }

是一个 lambda 表达式,它定义了一个只等待另一个方法的 async 方法。然后将此 lambda 传递给 Task.Run:

Task.Run(async () => { await SomeClass.Initiate(new Configuration()); })

Task.Run 在线程池线程上执行其代码。因此,async lambda 将在线程池线程上运行。 Task.Run 返回一个 Task,代表 async lambda 的执行。调用Task.Run后,代码调用Task.Wait:

Task.Run(async () => { await SomeClass.Initiate(new Configuration()); }).Wait();

这将阻塞主控制台应用程序,直到异步 lambda 完全完成。

如果想进一步看它是如何分解的,下面大致是等价的:

static async Task AnonymousMethodAsync()
{
await SomeClass.Initiate(new Configuration());
}

static void Main(string[] args)
{
var task = Task.Run(() => AnonymousMethodAsync());
task.Wait();
while (true) ;
}

关于c# - 了解一行中使用的 Task.Run + Wait() + async + await 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39622528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com