2011-09-27 50 views
4

正在瀏覽我的一個項目,偶然發現了我以前從未見過的MyWebExtentions文件中的以下代碼(和類)。什麼是神祕的ThreadSafeObjectProvider

Private s_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.ServerComputer) 

''' <summary> 
''' Returns information about the host computer. 
''' </summary> 

<Global.System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")> _ 
Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.ServerComputer 
    Get 
     Return s_Computer.GetInstance() 
    End Get 
End Property 

所以,我試圖尋找對象資源管理器和它不出現,搜索MSDN並沒有什麼,試圖計算器也沒什麼。最後,我發現this文章解釋說它允許你創建一個「線程安全的,線程特定的存儲」,但並不能解釋爲什麼或者如何。

那麼有人可以請客氣一些,以解釋這個類的目的是什麼,它是如何工作的,以及在非設計器生成的代碼中是否存在此類的任何適當的使用場景?

+0

我的猜測是,代碼是從這裏借用/翻譯的:http://bartdesmet.net/blogs/bart/archive/2006/03/14/3824.aspx – LukeH

+0

這是內部管道的一部分,使得我的命名空間在VB中工作。它沒有什麼有趣的地方,只是一個具有遠程處理意識的單例提供者,並不是線程安全的。今天,你會考慮'懶惰的'類來完成相同的。 –

回答

0

對於當您希望特定變量爲線程靜態但需要爲每個調用您的方法的上下文創建線程靜態變量時。你會用這個。 這將線程靜態變量保留在每個上下文中,其中將線程聲明爲靜態線程將僅保留線程在其創建的線程上。

這是我的理解,誠實可能是完全虛假的,但我是如何解釋它,並作爲我爲什麼在WCF工作一段時間的原因的一個例子。

雖然嚴重,但如果你必須downvote,但這是我最好的回答。

+0

我剛剛意識到這個問題是6歲... – ThatGuy