.NET 异步主方法线程

.NET async Main method thread

我只是想知道在没有 SynchronizationContext 的应用程序中(例如控制台),async static Main(args) 是如何实现的。是任何 await a

之前的 main 方法的开始
  1. Threadpool 线程,其中 CLR 本身有一个专用线程排队 Main 调用线程池并同步等待它完成?

  2. 它是一个专用的启动线程,它被编译成一个特殊的状态机,在每次等待时同步阻塞线程。或者甚至可能将所有 await 合并为一个,然后 main 线程等待此合并任务完成?

async static Task Main 方法实际上只是生成一个入口点,如下所示:

public static void GeneratedEntryPoint(string[] args)
{
    Main(args).GetAwaiter().GetResult();
}

所以就像普通的同步 Main 方法一样,它在没有同步上下文的线程中启动。这意味着任何延续都在线程池线程上执行。但是初始线程(它将执行任何代码,直到第一个需要安排延续的 await 表达式)本身不是线程池线程。