2011-09-27 79 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