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