我一直在使用async/ await一段时间,但最近深入研究,并阅读了许多最佳实践提示,默认情况下总是ConfigureAwait(false)用来防止死锁并提高性能.
我只是想确保我没有遗漏某些东西,当我认为这只适用于实际电流SynchronizationContext或TaskScheduler播放时,对吗?
如果我有一个响应消息/命令/等的Windows服务应用程序.异步,它总是只使用默认的调度程序=可能是等待完成的相同的线程池线程将执行延续,因此没有死锁和使用时没有性能差异ConfigureAwait(false),对吗?
这不是我不能把它放在那里,但我非常讨厌噪音代码......
Ree*_*sey 10
一般来说,这是事实.在控制台或服务方案中工作时,没有SynchronizationContext安装(默认情况下),因此continueOnCapturedContext选项ConfigureAwait将无效,这意味着您可以安全地删除它而不更改运行时行为.
但是,可能存在例外情况,因此我经常建议您ConfigureAwait(false)在适当的时候编写代码.
即使在控制台或服务应用程序中包含它的主要优点是:
SynchronizationContext时间运行,您的方法的行为将不会改变.