Я смущаю себя, просматривая документацию Microsoft по Lazy <T> (bool).Lazy <T> (bool) Документация конструктора
Параметр описывается как:
isThreadSafe: истинно, чтобы сделать этот экземпляр использоваться одновременно несколькими потоками; false, чтобы сделать экземпляр пригодным для использования только по одному потоку за раз.
Если код, который я обычно пишу в аксессора:
If _rulesCache Is Nothing Then
SyncLock (_lockRulesCache)
If _rulesCache Is Nothing Then
_rulesCache = New RulesCache()
End If
End SyncLock
End If
Return _rulesCache
Хочу ли я использовать Правда или Ложь в конструкторе типа ленивых?
Private _rulesCache As New Lazy(Of RulesCache)(**?**)
Так что мой аксессор становится:
Return _rulesCache.Value
1) После того, как объект создан, он может обрабатывать множественный доступ с резьбой внутри.
2) Мне просто нужно убедиться, что если несколько потоков попадают в аксессуар близко к одновременно, и объект не существует, он создается только один раз.
Согласно документации, утверждение 1 подразумевает, что параметр должен быть ложным. Утверждение 2 означает, что параметр должен быть истинным.
Я чувствую, что я слишком задумываюсь об этом, и это только меня смущает. Или два приведенных выше высказывания действительно противоречат друг другу, и я должен просто придерживаться ручной блокировки для управления созданием объекта?
Таким образом, я должен интерпретировать значение isThreadSafe как то, должен ли ожидать экземпляр Lazy и обрабатывать несколько потоков, пытающихся создать его экземпляр одновременно (true), или если он используется в среде с одним потоком, где он может использовать код, оптимизированный только для один поток, создающий его (false). Да? – ulty4life 2010-12-08 04:06:03