.NET 异步主方法线程
.NET async Main method thread
我只是想知道在没有 SynchronizationContext
的应用程序中(例如控制台),async static Main(args)
是如何实现的。是任何 await
a
之前的 main 方法的开始
Threadpool 线程,其中 CLR 本身有一个专用线程排队 Main
调用线程池并同步等待它完成?
或
它是一个专用的启动线程,它被编译成一个特殊的状态机,在每次等待时同步阻塞线程。或者甚至可能将所有 await
合并为一个,然后 main
线程等待此合并任务完成?
async static Task Main
方法实际上只是生成一个入口点,如下所示:
public static void GeneratedEntryPoint(string[] args)
{
Main(args).GetAwaiter().GetResult();
}
所以就像普通的同步 Main
方法一样,它在没有同步上下文的线程中启动。这意味着任何延续都在线程池线程上执行。但是初始线程(它将执行任何代码,直到第一个需要安排延续的 await
表达式)本身不是线程池线程。
我只是想知道在没有 SynchronizationContext
的应用程序中(例如控制台),async static Main(args)
是如何实现的。是任何 await
a
Threadpool 线程,其中 CLR 本身有一个专用线程排队
Main
调用线程池并同步等待它完成?或
它是一个专用的启动线程,它被编译成一个特殊的状态机,在每次等待时同步阻塞线程。或者甚至可能将所有
await
合并为一个,然后main
线程等待此合并任务完成?
async static Task Main
方法实际上只是生成一个入口点,如下所示:
public static void GeneratedEntryPoint(string[] args)
{
Main(args).GetAwaiter().GetResult();
}
所以就像普通的同步 Main
方法一样,它在没有同步上下文的线程中启动。这意味着任何延续都在线程池线程上执行。但是初始线程(它将执行任何代码,直到第一个需要安排延续的 await
表达式)本身不是线程池线程。