ReSharper 2025.2 Help

ConfigureAwait 分析

在依赖异步编程模型(async/await 关键字)的代码中,通常使用 ConfigureAwait() 调用来管理同步上下文。

ConfigureAwait() 调用的工作方式及其使用场景在 这篇 Microsoft .NET 博客文章以及您可以在互联网上找到的许多其他文章中有详细说明,但 ConfigureAwait() 的使用建议可以归结为以下几点:

  • 为了提高性能并避免潜在的死锁,请在任何非 UI 代码中使用 ConfigureAwait(false)。 这里的例外是应用程序级代码,例如 Windows Forms、WPF 和 ASP.NET。

  • ConfigureAwait(true) 对应于默认行为,并没有任何实际意义,因此可以安全地省略此类调用。

为了分析 ConfigureAwait() 的使用情况,ReSharper 需要知道它是应用程序级代码还是通用库代码。 默认情况下,ConfigureAwait 分析是禁用的,您需要在每个项目中启用分析,并选择以下两种模式之一:

  • 库模式 — ReSharper 将建议为可等待对象添加 ConfigureAwait(false) 调用。

  • UI 模式 — ReSharper 将报告 ConfigureAwait(true) 调用为多余的。

启用 ConfigureAwait 分析并选择其模式

  • 要在项目中启用 ConfigureAwait 分析,请右键单击解决方案资源管理器中的项目,选择 编辑项目项属性 | ConfigureAwait 分析模式 ,然后选择 UI

  • 要在当前项目中启用 ConfigureAwait 分析,请将光标放在任何 await 关键字上,按 Alt+Enter ,选择 ConfigureAwait 分析 ,然后选择 UI

  • 如果您 使用 EditorConfig ,您可以通过以下属性为项目、文件夹或文件指定 ConfigureAwait 分析模式: configure_await_analysis_mode = libraryconfigure_await_analysis_mode = ui

ConfigureAwait 分析依赖于两个 代码检查 :在 UI 模式多余的 'ConfigureAwait(true)' 和在 库模式缺少 '.ConfigureAwait(false)'。 请确保这些检查已在 ReSharper 选项 的 代码检查 | 检查严重性 页面上启用 Alt+R, O

要微调分析,您可以在项目中启用它,然后在应忽略的地方 抑制这些检查。

最后修改日期: 2025年 9月 27日