ConfigureAwait(false)在Console/Win服务应用程序中不需要,对
本文关键字:应用程序 服务 不需要 Win false Console ConfigureAwait | 更新日期: 2023-09-27 18:21:45
我使用async
/await
已经有一段时间了,但最近进行了更深入的研究,并阅读了许多最佳实践提示,其中表示默认情况下始终使用ConfigureAwait(false)
来防止死锁并提高性能。
当我认为这只适用于实际的当前SynchronizationContext
或TaskScheduler
时,我只想确保我没有遗漏什么,对吗?
如果我有一个Windows服务应用程序正在响应消息/命令等。异步地,它总是只使用默认的调度程序=可能与awaitable完成的线程池线程相同的线程池将执行延续,因此与使用ConfigureAwait(false)
不会出现死锁和性能差异,对吗?
我并不是不能把它放在那里,但我太讨厌噪音代码了。。。
一般来说,这是真的。在控制台或服务场景中工作时,没有安装SynchronizationContext
(默认情况下),因此ConfigureAwait
中的continueOnCapturedContext
选项将无效,这意味着您可以在不更改运行时行为的情况下安全地删除它。
然而,也可能有例外,所以我经常建议在适当的时候编写包括ConfigureAwait(false)
在内的代码。
即使在控制台或服务应用程序中也包含此功能的主要优点是:
- 该代码稍后可在其他应用程序中重复使用。如果您选择重用此代码,则不必追踪由于不包含此代码而产生的错误
- 如果您在运行时碰巧安装(或使用安装的库)
SynchronizationContext
,则方法的行为不会改变