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/