![](/img/trans.png)
[英]Synchronously calling async method in WebAPI deadlocks even with ConfigureAwait(false)
[英]ConfigureAwait(false) in WebAPI controller
当您不需要捕获上下文时,仍应在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.