请参阅以下文章,该文章使人们相信.NET Task可以在不涉及本机OS线程的情况下执行。这是真的吗?
Difference between Task (System.Threading.Task) and Thread
编辑
在复查重复的问题时,我找不到直接解决以下问题的答案:实例化.NET Task类最终将在本机OS线程上执行。它们是指线程,但不能区分托管和本机OS线程,还是仅指托管线程。唯一可以重复的是我对这些问题之一的回答。
但是,在挖掘自我时,.NET似乎没有避免本地OS线程的“魔术”。 Windows内核没有更改以允许这样做。这与我几十年前的操作系统经验是一致的。简而言之,没有任何人可以编写的无法在本机Windows OS线程上运行的应用程序代码。
About Processes and Threads Managed Threading
也:
Windows Kernel Internals Process Architecture
答案 0 :(得分:5)
答案是:这取决于。
涉及一些计算工作的任务将在线程上运行,并且通常是线程池中的线程。
长时间运行的任务(即使用选项TaskCreationOptions.LongRunning
创建的任务)在为其创建的专用线程上运行。
I / O任务,例如await stream.ReadAsync()
根本没有线程。该操作将发送到IO设备,并且CPU可以随意执行任何操作。只有当设备准备好请求的数据时,它会中断 CPU,进行一些低级处理,最终OS会从线程池中获取线程来完成任务并得出结果适用于您的程序。更多详细信息here。