ConfigureAwait(false)在Console/Win服务应用程序中不需要,对

本文关键字:应用程序 服务 不需要 Win false Console ConfigureAwait | 更新日期: 2023-09-27 18:21:45

我使用async/await已经有一段时间了,但最近进行了更深入的研究,并阅读了许多最佳实践提示,其中表示默认情况下始终使用ConfigureAwait(false)来防止死锁并提高性能。

当我认为这只适用于实际的当前SynchronizationContextTaskScheduler时,我只想确保我没有遗漏什么,对吗?

如果我有一个Windows服务应用程序正在响应消息/命令等。异步地,它总是只使用默认的调度程序=可能与awaitable完成的线程池线程相同的线程池将执行延续,因此与使用ConfigureAwait(false)不会出现死锁和性能差异,对吗?

我并不是不能把它放在那里,但我太讨厌噪音代码了。。。

ConfigureAwait(false)在Console/Win服务应用程序中不需要,对

一般来说,这是真的。在控制台或服务场景中工作时,没有安装SynchronizationContext(默认情况下),因此ConfigureAwait中的continueOnCapturedContext选项将无效,这意味着您可以在不更改运行时行为的情况下安全地删除它。

然而,也可能有例外,所以我经常建议在适当的时候编写包括ConfigureAwait(false)在内的代码。

即使在控制台或服务应用程序中也包含此功能的主要优点是:

  1. 该代码稍后可在其他应用程序中重复使用。如果您选择重用此代码,则不必追踪由于不包含此代码而产生的错误
  2. 如果您在运行时碰巧安装(或使用安装的库)SynchronizationContext,则方法的行为不会改变