我已经读过async/await方法在与调用者相同的线程中运行,我在WPF应用程序中看到它,但在控制台应用程序中测试代码时,我发现它在与调用者不同的线程中运行.我错过了什么吗?
Ree*_*sey 14
我错过了什么吗?
有点. await对线程一无所知.它会导致await关键字后面的代码(默认情况下)SynchronizationContext与调用者一样运行(如果存在).
在WPF应用程序的情况下,当前SynchronizationContext设置为将调用封送回UI线程,这意味着它将最终在UI线程上.(在Windows窗体中也是如此).在控制台应用程序中,没有SynchronizationContext,因此它无法回发到该上下文,这意味着您将最终在ThreadPool线程上.
如果你要安装一个定制SynchronizationContext成SynchronizationContext.Current,通话将张贴在那里.然而,这在控制台应用程序中并不常见,因为它通常需要像"消息循环"这样的东西才能正常工作.