c# - .NET 异步主方法线程
问题描述
我只是想知道在没有SynchronizationContext
(例如控制台)的应用程序中,如何async static Main(args)
实现。await
是任何a之前的 main 方法的开始
线程池线程,CLR 本身有一个专用线程,该线程将
Main
调用排队到线程池并同步等待它完成?或者
它是一个专用的启动线程,它被编译成一个特殊的状态机,在每次等待时同步阻塞线程。或者甚至可能所有
await
的 s 组合成一个,main
线程等待这个组合任务完成?
解决方案
一个async static Task Main
方法实际上只是生成一个像这样的入口点:
public static void GeneratedEntryPoint(string[] args)
{
Main(args).GetAwaiter().GetResult();
}
所以就像一个普通的同步Main
方法一样,它从一个没有同步上下文的线程开始。这意味着任何延续都在线程池线程上执行。但是初始线程(将执行任何代码,直到第一个await
需要调度延续的表达式)本身不是线程池线程。
推荐阅读
- dart - Dart:为什么不能用“实现”来限制泛型类型?
- c++ - CMake 不构建 .dll 文件,而是创建 .dir
- java - 如何使用 CodeQL 检查 Java 注释是否具有特定属性?
- javascript - p5 在不需要的 html 页面中加载
- java - 如何为 application.properties 设置服务器名称、登录名和密码?
- java - LinkedBlockingQueue 与 take() 多次
- arrays - 一次增加两个数组元素,使它们都等于最大值
- machine-learning - 使用多项式基函数进行回归时,小批量梯度下降不起作用
- javascript - FastAPI返回Json Array,需要转成表格
- opencv - OpenCV VideoCapture 无法打开文件,如何确定原因?