.net 4.0 懒惰<;T>;(bool)建造商文件

.net 4.0 懒惰<;T>;(bool)建造商文件,.net-4.0,.net 4.0,在阅读微软关于懒惰(bool)构造函数的文档时,我把自己弄糊涂了 参数描述为: isThreadSafe:为true,使此实例可由多个线程并发使用;false使实例一次只能由一个线程使用 如果我通常在访问器中编写的代码是: If _rulesCache Is Nothing Then SyncLock (_lockRulesCache) If _rulesCache Is Nothing Then _rulesCache = New Rule

在阅读微软关于懒惰(bool)构造函数的文档时,我把自己弄糊涂了

参数描述为:

isThreadSafe:为true,使此实例可由多个线程并发使用;false使实例一次只能由一个线程使用

如果我通常在访问器中编写的代码是:

If _rulesCache Is Nothing Then

    SyncLock (_lockRulesCache)

        If _rulesCache Is Nothing Then

            _rulesCache = New RulesCache()

        End If

    End SyncLock

End If

Return _rulesCache
我想在惰性类型的构造函数中使用True还是False

Private _rulesCache As New Lazy(Of RulesCache)(**?**)
因此,我的访问者变成:

Return _rulesCache.Value
1) 一旦创建了对象,它就可以在内部处理多线程访问

2) 我只需要确保如果有多个线程同时接近访问器,并且对象不存在,那么它只会被创建一次

根据文档,语句1暗示参数应该为false。语句2表示参数应该为true


我觉得我想得太多了,这让我更加困惑。或者上面的两个语句实际上是相互矛盾的,我应该坚持使用手动锁定来管理对象实例化吗?

语句2是理想的解释。惰性初始化完成后,该参数不影响对象的任何行为;它只防止两个线程意外地竞速并实例化它两次。如果您感到好奇,可以在Reflector中验证这一点。

因此我应该将isThreadSafe值解释为Lazy的实例是否应该期望并处理尝试同时实例化它的多个线程(true),或者它是否正在单线程环境中使用,在单线程环境中,它可以使用针对单个线程实例化它而优化的代码(错)。是吗?是的,这是一个准确的总结。