Pau*_*aul 5 c# multithreading asynchronous
据我了解,当在 UI 线程上调用的方法上使用 async 和 wait 时,可以释放 UI 线程来执行其他工作,同时等待某些 IO 完成。如果我在线程池线程调用的方法上使用异步等待,那么当 IO 完成时该线程池线程会发生什么?是不是又回到池子里了?当 IO 完成时,哪个线程完成后一种情况下的方法?
如果我在线程池线程调用的方法上使用异步等待,那么当 IO 完成时该线程池线程会发生什么?是不是又回到池子里了?
是的,线程池线程返回到线程池中。
当 IO 完成时,哪个线程完成后一种情况下的方法?
默认情况下,await将捕获当前“上下文”,并在完成async时使用它来恢复该方法await。SynchronizationContext.Current除非是 ,否则此“上下文”为null,在这种情况下,“上下文”为TaskScheduler.Current。
在 UI 情况下,有一个 UISynchronizationContext会导致该async方法在 UI 线程上恢复执行。在线程池的情况下,SynchronizationContext.Current是null,TaskScheduler.Current是线程池任务调度程序。因此,该async方法在线程池线程(任何任意线程,不一定是同一线程)上恢复。
如果您想了解有关此行为的更多信息,我的async介绍可能会对您有所帮助。
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |