[英].NET async Main method thread
我只是想知道在没有SynchronizationContext
(例如控制台)的应用程序中, async static Main(args)
是如何实现的。 是在任何await
之前的主要方法的开始
线程池线程,CLR 本身有一个专用线程,它将Main
调用排队到线程池并同步等待它完成?
或者
它是一个专用的启动线程,它被编译成一个特殊的 state 机器,在每次等待时同步阻塞线程。 或者甚至可能所有的await
组合成一个, main
线程等待这个组合任务完成?
async static Task Main
方法实际上只生成一个入口点,如下所示:
public static void GeneratedEntryPoint(string[] args)
{
Main(args).GetAwaiter().GetResult();
}
所以就像普通的同步Main
方法一样,它在没有同步上下文的线程中启动。 这意味着任何延续都在线程池线程上执行。 但是初始线程(将执行任何代码,直到第一个需要调度延续的await
表达式)本身不是线程池线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.