繁体   English   中英

WebAPI控制器中的ConfigureAwait(false)

[英]ConfigureAwait(false) in WebAPI controller

SonarLint应该在ASP.NET Web API控制器中触发S3216吗? 看来这个规则适用于桌面应用程序,在ASP.NET中,上下文完全不同,没有死锁的危险。 或者我错过了什么?

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

ConfigureAwait控制是否在捕获的SynchronizationContext上恢复。 确实,这在UI应用程序中是一个更痛苦的问题,但它与所有UI应用程序和所有asp.net应用程序的SynchronizationContext无关。

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

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

@VictorGrigoriu,我们只检查编译单元的输出类型是否是DLL,我们仅在DLL中报告问题。 你是对的,我们报告在DLL中你仍然需要切换回原始上下文的情况。 总的来说,要弄清楚这是一件非常困难的事情,但我们可以添加一个顶级Web应用程序集的检查。 我们需要提出一个很好的方法来执行此操作或默认情况下禁用规则以不生成误报。

我创建了一张跟踪此问题的票证: https//jira.sonarsource.com/browse/SLVS-790

其他选项,直到我们提出永久解决方案:如果您觉得这是一个烦恼,您可以在给定项目上本地禁用此规则。 为此,您需要通过“references / analyzers / open active rule set”编辑项目的规则集文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM