关于c#:.NET任务中的代码是否最终通过本机Windows线程在CPU或CPU Core上运行?

Does code in a .NET Task ultimately run on a CPU or CPU Core via native Windows Thread?

本问题已经有最佳答案,请猛点这里访问。

参考下面的文章,这让人相信.NET任务执行时不涉及本机OS线程。这是真的吗?

任务(system.threading.task)和线程之间的差异

编辑

在回顾重复的问题时,我找不到直接解决这个问题的答案,而实例化.NET任务类最终将在本机OS线程上执行。它们指的是线程,但要么不区分托管和本机OS线程,要么只指托管线程。唯一可以复制的是我自己对其中一个问题的回答。

但在挖掘自己的过程中,似乎没有任何.NET的"魔力"可以避免本地操作系统线程。Windows内核不允许更改。这与我几十年前的操作系统经验是一致的。简而言之,没有任何人可以编写的应用程序代码不能在本机Windows OS线程上运行。

关于进程和线程托管线程

也:

Windows内核内部进程体系结构

Windows内核的体系结构

Windows内核体系结构的演变


答案是:视情况而定。

涉及一些计算工作的任务将在线程上运行,通常是来自线程池的线程。

长时间运行的任务,即使用选项TaskCreationOptions.LongRunning创建的任务,在专用线程上运行,该线程是为它们创建的。

await stream.ReadAsync()这样的I/O任务根本没有线程。操作被发送到IO设备,CPU可以自由地做任何它想做的事情。只有当设备准备好请求的数据时,它才会中断CPU,进行一些低级处理,最终操作系统从线程池中获取一个线程来完成任务并使结果对程序可用。更多详细信息。