C# 异步等待和线程池

Pau*_*aul 5 c# multithreading asynchronous

据我了解,当在 UI 线程上调用的方法上使用 async 和 wait 时,可以释放 UI 线程来执行其他工作,同时等待某些 IO 完成。如果我在线程池线程调用的方法上使用异步等待,那么当 IO 完成时该线程池线程会发生什么?是不是又回到池子里了?当 IO 完成时,哪个线程完成后一种情况下的方法?

Ste*_*ary 3

如果我在线程池线程调用的方法上使用异步等待,那么当 IO 完成时该线程池线程会发生什么?是不是又回到池子里了?

是的,线程池线程返回到线程池中。

当 IO 完成时,哪个线程完成后一种情况下的方法?

默认情况下,await将捕获当前“上下文”,并在完成async时使用它来恢复该方法awaitSynchronizationContext.Current除非是 ,否则此“上下文”为null,在这种情况下,“上下文”为TaskScheduler.Current

在 UI 情况下,有一个 UISynchronizationContext会导致该async方法在 UI 线程上恢复执行。在线程池的情况下,SynchronizationContext.CurrentnullTaskScheduler.Current是线程池任务调度程序。因此,该async方法在线程池线程(任何任意线程,不一定是同一线程)上恢复。

如果您想了解有关此行为的更多信息,我的async介绍可能会对您有所帮助。