gpt4 book ai didi

c# - 关于 Async 和 Await 的工作原理 c#

转载 作者:行者123 更新时间:2023-11-30 13:19:05 24 4
gpt4 key购买 nike

我在这个网站上看到了一些关于 Async 和 Await 用法的帖子。很少有人说 Async 和 Await 在单独的后台线程上完成它的工作意味着产生一个新的后台线程,很少有人说不意味着 Async 和 Await 不启动任何单独的后台线程来完成它的工作。

所以任何人只要告诉我使用 Async 和 Await 时会发生什么。

这是一个小程序

class Program
{
static void Main(string[] args)
{
TestAsyncAwaitMethods();
Console.WriteLine("Press any key to exit...");
Console.ReadLine();
}

public async static void TestAsyncAwaitMethods()
{
await LongRunningMethod();
}

public static async Task<int> LongRunningMethod()
{
Console.WriteLine("Starting Long Running method...");
await Task.Delay(5000);
Console.WriteLine("End Long Running method...");
return 1;
}
}

输出是:

Starting Long Running method...
Press any key to exit...
End Long Running method...

最佳答案

问题是 async/await 是关于异步的,而不是线程。

如果您使用 Task.Run,它确实会使用后台线程(通过线程池,通过任务并行库)。

但是,对于 IO 操作,它依赖于 IO Completion 端口来通知操作何时完成。

async/await 的唯一保证是,当操作完成时,它将在开始时所在的 SynchronizationContext 中返回给调用者。实际上,这意味着它将返回到 UI 线程(在 Windows 应用程序中)或可以返回 HTTP 响应的线程(在 ASP.NET 中)

关于c# - 关于 Async 和 Await 的工作原理 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32137074/

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