首页 > 解决方案 > .NET 异步主方法线程

问题描述

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

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

    或者

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

标签: c#multithreadingasynchronousasync-awaitclr

解决方案


一个async static Task Main方法实际上只是生成一个像这样的入口点:

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

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


推荐阅读