繁体   English   中英

.NET async 主方法线程

[英].NET async Main method thread

我只是想知道在没有SynchronizationContext (例如控制台)的应用程序中, async static Main(args)是如何实现的。 是在任何await之前的主要方法的开始

  1. 线程池线程,CLR 本身有一个专用线程,它将Main调用排队到线程池并同步等待它完成?

    或者

  2. 它是一个专用的启动线程,它被编译成一个特殊的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM