簡體   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