gpt4 book ai didi

c# - 如果 async/await 不创建新线程然后解释这段代码

转载 作者:太空狗 更新时间:2023-10-29 19:53:38 39 4
gpt4 key购买 nike

我读过 this thread其权利要求引用msdn认为 async/await 不会创建新线程。请看下面的代码:

static class Program
{
static void Main(string[] args)
{
var task = SlowThreadAsync();
for(int i = 0; i < 5; i++)
{
Console.WriteLine(i * i);
}
Console.WriteLine("Slow thread result {0}", task.Result);
Console.WriteLine("Main finished on thread {0}", Thread.CurrentThread.ManagedThreadId);
Console.ReadKey();
}

static async Task<int> SlowThreadAsync()
{
Console.WriteLine("SlowThreadAsync started on thread {0}", Thread.CurrentThread.ManagedThreadId);
await Task.Delay(2000);
Console.WriteLine("SlowThreadAsync completed on thread {0}", Thread.CurrentThread.ManagedThreadId);
return 3443;

}
}

作为这段代码的结果,我得到了不同的 ThreadId。为什么同一个线程获取不同的ThreadId?

different threads

最佳答案

您正在为示例使用控制台应用程序。这会极大地影响您的测试结果。控制台应用程序没有自定义 SynchronizationContext(就像 Winforms、WPF 和 ASP.NET 一样),因此它使用 ThreadPoolTask​​Scheduler 来安排任意线程池线程上的延续。在 UI 应用程序中尝试这个相同的示例,您将看到在同一线程上调用的延续。

关于c# - 如果 async/await 不创建新线程然后解释这段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32453127/

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