fooCPU
(它不调用执行I/O操作的纯异步方法,也不使用其他线程通过调用Task.Run
或类似方式来运行其代码)。该方法执行一些繁重的计算 - 它是CPU绑定的。现在,在我的程序中调用
fooCPU
而没有将其委托给工作线程来执行。如果fooCPU
的某一行需要长时间运行,则在它完成之前不会执行其他行。因此,例如从UI线程调用它会导致UI线程冻结(GUI将变得无响应)。当我说
async/await
是多线程的模拟时。两个不同代码段的行交替执行,但只使用单个线程。如果其中一行需要长时间运行,则在它完成之前不会执行其他行。
有人告诉我这对于在UI线程上使用的异步操作是正确的,但对于所有其他情况(ASP.NET、线程池上的异步操作、控制台应用程序等)则不正确。有人能告诉我这可能意味着什么吗?UI线程与控制台程序的主线程有何不同?
我认为,没有人希望在这个论坛上继续讨论相关话题,例如在评论中出现,因此最好提出一个新问题。