我理解通过IO执行的事情的重叠IO,比如发送SQL查询或HTTP请求。因此,当执行await http.GetAsync(url)
时,我假设内部已经对重叠的IO操作进行了排队,并且当ICOP发出信号时,我的执行将继续。
然而,当我们在线程池工作线程(如await Task.Run(() => CalculatePrimeNumbersFirst(n))
(中运行纯计算绑定的东西时,调用Task.Run
的线程是否真的被阻止了,因为没有注册实际的IOCP?
我认为我在线程池中执行的回调向awaiter发出信号,并自行继续执行,但我找不到一个很好的解释。
await Task.Run(() => CpuOperations())
只会从池中选择一个空闲线程,并从中执行您的委托。
然后,执行将简单地通知await
的状态机其完成,并且所选的同步上下文将继续执行您的下一行代码。
不会等待和/或使用实际的IO端口。