我有一個WCF服務,它將每個調用記錄到數據庫。稍後,如果發生異常,它也會記錄到單獨的數據庫中。C#中的線程上下文究竟是什麼?
我想要一種方式將這兩個日誌綁定在一起,以便我們可以看到可能導致異常的原因。爲了做到這一點,我想要一些獨特的ID,我可以獲得每個電話。因爲整個事情正在一個線程上執行,所以我可以例如將線程名稱設置爲一個GUID,例如。 System.Threading.Thread.CurrentThread.Name = Guid.NewGuid().ToString();
但這有點哈克。
在網上搜索,我發現System.Threading.Thread.CurrentContext.SetProperty()
,但我想知道具體的背景是什麼。它是否被設計爲在線程期間存儲屬性?每個線程是否獨一無二?
如果我有5個併發WCF調用,我不希望在上下文中發生的事情之間發生任何衝突,如果它不是'每次調用'可以這麼說。
有人可以澄清嗎?
哦有趣,謝謝! – NibblyPig
作爲更新,如果您使用的是.NET 4.6,則應該將'ThreadLocal'切換爲['AsyncLocal'](https://msdn.microsoft.com/zh-cn/library/dn906268(v = vs.110) ).aspx),這可以讓您的存儲在異步/等待邊界上流動,您可以最終跳出線程。 –