Asp.net
ASP.Net vs MVC vs WebAPI 和 UseTaskFriendlySynchronizationContext
我有幾個 ASP.Net MVC 和 WebAPI 項目。它們中的大多數都是最新的(MVC 5 / WebAPI 2)。自從我實現一個全域過濾器(用於 MVC)和一個委託處理程序(用於 WebAPI)來統一整個系統的安全性以來,我一直在仔細檢查我的安全假設。
在這種情況下,我遇到了一些文章和文章(見下文),它們說您應該始終設置
UseTaskFriendlySynchronizationContext為true(預設為false)。這對我來說似乎很奇怪,因為即使在使用 MVC 5 和 WebAPI 2 新項目模板(以及 ASP.Net WebForms 模板)的 VS2013 中也根本沒有設置此應用程序設置。有關此設置的 MSDN 文件實際上不存在,而且我發現確實說非同步程式需要它的文章似乎是在 WebForms 的上下文中。
所以這是我的問題:
- 此設置是否適用於所有 ASP.Net 或者它是否特定於 ASP.Net 中的頁面生命週期內容(我沒有使用太多)
- 如果它對現代非同步程式如此重要,為什麼沒有任何教程或模板引用它?
- 在使用 ConfigureAwait(false) 的引用庫中使用 Thread.CurrentPrincipal 的聲明會造成任何問題,還是 ExecutionContext 的邏輯呼叫上下文的流動會在那裡照顧我?(到目前為止我的閱讀和測試表明它會)
以下是我看過的一些文章
UseTaskFriendlySynchronizationContext:
- 非同步設置 Thread.CurrentPrincipal?
- MSDN 上的 ASP.NET appSettings 元素
- “UseTaskFriendlySynchronizationContext”是什麼意思?
SynchronizationContextMarcus van Houd 在 ASP.NET 中的理解- 為什麼 Thread.CurrentPrincipal 需要“等待 Task.Yield()”才能正確流動?
一些真正幫助我了解所有這些東西是如何工作的文章從未提及
UseTaskFriendlySynchronizationContext:
缺少的關鍵參考是這篇博文。具體來說,您需要設置或設置
UseTaskFriendlySynchronizationContext為targetFramework.4.5創建一個新項目設置targetFramework為4.5,因此您確實獲得了正確的行為(UseTaskFriendlySynchronizationContext隱式設置為true)。要回答您的具體問題:
- 該設置會影響對各種請求的 ASP.NET 請求處理,而不僅僅是 WebForms。
- 大多數
async教程都假設一個 GUI 應用場景。- 我不知道; 我認為這作為一個單獨的問題會更好。我的直覺是,離開 ASP.NET 上下文後,您將無法依賴。
Thread.CurrentPrincipal