Lazy <t>(bool)构造函数文档</t>

时间:2010-12-08 01:07:32

标签: .net-4.0

我在阅读微软关于Lazy&lt; T&gt;(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

我想在Lazy类型的构造函数中使用True还是False?

Private _rulesCache As New Lazy(Of RulesCache)(**?**)

所以我的访问者变成了:

Return _rulesCache.Value

1)创建对象后,它可以在内部处理多个线程访问。

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

根据文档,声明1暗示参数应为false。声明2暗示参数应为true。

我觉得我过度思考这个问题,这让我更加困惑。或者上面的两个陈述实际上彼此不一致,我应该坚持使用手动锁定来管理对象实例化?

1 个答案:

答案 0 :(得分:2)

陈述2是理想的解释。延迟初始化完成后,该参数不会影响对象的任何行为;它只能防止两个线程意外地竞争并将其实例化两次。如果你很好奇,可以在Reflector中验证。