c# - WebAPI Controller 中的 ConfigureAwait(false)

标签 c# async-await asp.net-web-api2 sonarlint

SonarLint 应该启动 S3216在 ASP.NET Web API Controller 中?这条规则似乎是针对桌面应用程序的,在 ASP.NET 中上下文完全不同,没有死锁的危险。还是我遗漏了什么?

最佳答案

当您不需要捕获上下文时,您仍然应该在 WebAPI 中使用 ConfigureAwait(false)

ConfigureAwait 控制是否在捕获的 SynchronizationContext 上恢复。诚然,这在 UI 应用程序中是一个更痛苦的问题,但它在任何有 SynchronizationContext 的地方都是相关的,它是所有 UI 应用程序和所有 asp.net 应用程序。

在 UI 应用程序中,SynchronizationContext 管理的资源是单个 UI 线程,因此如果您阻止它,则可能会死锁。在 asp.net 应用程序中,资源是请求上下文,您也可以在它上面发生死锁。

您可以避免在控制台应用程序或 Windows 服务中使用 ConfigureAwait,但在适当的地方继续使用它仍然是一个好习惯。

关于c# - WebAPI Controller 中的 ConfigureAwait(false),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35265502/

相关文章:

c# - 如何使用 C# 从 USB RFID 读取器读取

c# - OData V4 属性访问

ajax - 从具有 NTLM 安全性的 AngularJS 调用 WebAPI2 服务

c# - WebApi OWIN 相同 token 对两个不同的服务实例有效

c# - 为什么在使用 ObjectContent 时无法从 HttpClient SendAsync 捕获异常

c# - .Net 程序集安全 - 防止黑客攻击/逆向工程

flutter - Flutter-如何在streambuilder中使用await?

c# - 等待事件处理程序

javascript - 如果一个异步 Vuex 操作运行两次,等待调用之后的代码可以随机运行吗?

c# - 从 Web Api 2 IAuthenticationFilter AuthenticateAsync 方法设置 cookie