Asp.net

ASP.Net vs MVC vs WebAPI 和 UseTaskFriendlySynchronizationContext

  • December 9, 2013

我有幾個 ASP.Net MVC 和 WebAPI 項目。它們中的大多數都是最新的(MVC 5 / WebAPI 2)。自從我實現一個全域過濾器(用於 MVC)和一個委託處理程序(用於 WebAPI)來統一整個系統的安全性以來,我一直在仔細檢查我的安全假設。

在這種情況下,我遇到了一些文章和文章(見下文),它們說您應該始終設置UseTaskFriendlySynchronizationContexttrue(預設為false)。這對我來說似乎很奇怪,因為即使在使用 MVC 5 和 WebAPI 2 新項目模板(以及 ASP.Net WebForms 模板)的 VS2013 中也根本沒有設置此應用程序設置。

有關此設置的 MSDN 文件實際上不存在,而且我發現確實說非同步程式需要它的文章似乎是在 WebForms 的上下文中。

所以這是我的問題:

  1. 此設置是否適用於所有 ASP.Net 或者它是否特定於 ASP.Net 中的頁面生命週期內容(我沒有使用太多)
  2. 如果它對現代非同步程式如此重要,為什麼沒有任何教程或模板引用它?
  3. 在使用 ConfigureAwait(false) 的引用庫中使用 Thread.CurrentPrincipal 的聲明會造成任何問題,還是 ExecutionContext 的邏輯呼叫上下文的流動會在那裡照顧我?(到目前為止我的閱讀和測試表明它會)

以下是我看過的一些文章UseTaskFriendlySynchronizationContext

一些真正幫助我了解所有這些東西是如何工作的文章從未提及UseTaskFriendlySynchronizationContext

缺少的關鍵參考是這篇博文。具體來說,您需要設置設置UseTaskFriendlySynchronizationContext targetFramework. 4.5創建一個新項目設置targetFramework4.5,因此您確實獲得了正確的行為(UseTaskFriendlySynchronizationContext隱式設置為true)。

要回答您的具體問題:

  1. 該設置會影響對各種請求的 ASP.NET 請求處理,而不僅僅是 WebForms。
  2. 大多數async教程都假設一個 GUI 應用場景。
  3. 我不知道; 我認為這作為一個單獨的問題會更好。我的直覺是,離開 ASP.NET 上下文後,您將無法依賴。Thread.CurrentPrincipal

引用自:https://stackoverflow.com/questions/20478381