2013-06-21 27 views
6

這是一個問題的兩個部分:什麼「當前」流動性與執行上下文

  1. 有人可以提供ASP.NET/.NET性質通常線程本地與流動的ExecutionContext的名單?

    HttpContext.Current? Thread.CurrentContext? Thread.CurrentPrincipal? Thread.CurrentCulture?

    我可以依賴哪些屬性來維持/持續異步/等待?

    還有什麼?

  2. 有沒有什麼辦法可以添加應用程序特定的上下文信息,這些信息將自動用ExecutionContext流動?像

    var ec = ExecutionContext.Capture(); 
    ec.CustomContext["MyCustomContext"] = ACustomContext; 
    
+1

你究竟在做什麼?爲什麼你覺得需要存儲自定義上下文? –

+0

如果你有兩個單獨的問題,*你應該問兩個問題*。 – svick

+0

@ReedCopsey,我試圖重構一些使用ThreadStatic和其他線程本地存儲機制的遺留代碼,以便它可以很好地與async/await配合使用。 –

回答

13

最好的資源,這樣的東西是ExecutionContext vs. SynchronizationContext由Stephen Toub。沒有任何屬性列表,如你正在尋找的東西。

ASP.NET實際上使用SynchronizationContext流程HttpContext.Currenttreats Thread.CurrentPrincipal rather oddly

您可以使用LogicalSetData/LogicalGetData添加自己的上下文。但是,您應該只存儲不可變數據。我記錄了這個on my blog

+0

謝謝(對於LogicalSetData/LogicalGetData)。我會閱讀你已經提到過的每篇文章,但是它仍然留下了什麼框架上下文流的問題。似乎對文件來說很重要... –

+0

@JoeEnzminger:順便說一句,我不推薦*邏輯獲取/設置數據。如果您找不到其他解決方案,則只能使用*。我沒有運行基準測試,但我預計它比'ThreadStatic'慢得多。明確的方法參數或實例字段將是我選擇的解決方案。 –

+1

+1。有趣的是,看看究竟有什麼流動,雖然沒有記錄:http://referencesource.microsoft.com/#mscorlib/system/threading/executioncontext.cs#3a777fa35a9f1ffe。特別有趣的是,同步上下文如何通過'ExecutionContext.Run'顯式流動,但不是隱含的。 – Noseratio

相關問題