gpt4 book ai didi

c# - C# Async/Await 是否像中断一样工作?

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

我这样测试控制台应用程序:

class Program
{
static void Main(string[] args)
{
Test();

Console.WriteLine("C");

Console.ReadLine();
}

static async void Test()
{
Console.WriteLine("A");
await Task.Delay(2000);
Console.WriteLine("B");
}
}

此应用程序立即打印 A 和 C,然后在 2 秒后打印 B。看起来不错。但是我读了一篇关于异步/等待的文章“没有线程”(http://blog.stephencleary.com/2013/11/there-is-no-thread.html),它说异步/等待不会创建额外的线程。

所以回到我的控制台应用程序,我认为主线程在 Console.ReadLine() 上被阻塞了,所以 Test() (Console.WriteLine("B")) 中的剩余代码直到 Console.ReadLine 才会执行() 做完了。但实际结果不同,不管主线程是否阻塞,剩下的代码都会执行。

我想知道 await 的工作方式类似于 CPU 中断,所以指令指针移动到剩余代码(Console.WriteLine(“B”);)并在之后移动回中断位置(Console.ReadLine();)执行?

最佳答案

与 Windows 窗体应用程序不同,控制台应用程序没有单个“幸运”线程(UI 线程)。因此,没有特别的 synchronization context默认情况下在控制台应用程序中使用,因此 await 使用的延续实际上是使用线程池进行调度的。

因此无需“中断”当前正在等待 Console.ReadLine 的线程 - 而是使用另一个线程。

关于c# - C# Async/Await 是否像中断一样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42154802/

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