Что такое загадочный ThreadSafeObjectProvider

Просматривал мой проект и наткнулся на следующий код (и класс) внутри файла MyWebExtentions, который я никогда раньше не видел.

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 и ничего, пробовал stackoverflow также ничего. В конце концов я нашел эту статью, которая объясняет что он позволяет вам создать «потокобезопасное хранилище для конкретных потоков», но не объясняет, почему и как.

Итак, может ли кто-нибудь быть достаточно любезным, чтобы объяснить, какова цель этого класса, как он работает и есть ли какие-либо подходящие сценарии использования для этого класса в коде, сгенерированном не дизайнером?


person Maxim Gershkovich    schedule 27.09.2011    source источник
comment
Я предполагаю, что код был заимствован/переведен отсюда: bartdesmet .net/blogs/bart/archive/2006/03/14/3824.aspx   -  person LukeH    schedule 27.09.2011
comment
Это часть внутренней системы, благодаря которой пространство имен My работает в VB. Он делает очень мало интересного, просто одноэлементный провайдер с пониманием удаленного взаимодействия, который не так уж и потокобезопасен. Сегодня вы бы подумали, что класс Lazy<T> выполняет то же самое.   -  person Hans Passant    schedule 15.08.2017


Ответы (1)


Когда вы хотите, чтобы определенная переменная была статической для потока, но вам нужно создать статическую переменную для каждого контекста, который вызывает ваш метод. Вы бы использовали это. Это сохраняет статические переменные потока для каждого контекста, где объявление чего-либо как статического потока сохранит его только для потока, в котором он был создан.

Это мое понимание, которое, честно говоря, может быть полностью фиктивным, но именно так я его интерпретировал и служит примером того, почему я какое-то время работал в WCF.

А если серьезно, поставьте минус, если нужно, но это моя лучшая попытка ответить.

person ThatGuy    schedule 15.08.2017