我想知道Lazy<T>
类的两个构造函数重载之间有什么区别。
Lazy(Func,Boolean) - 初始化Lazy的新实例 类。当延迟初始化发生时,指定初始化 使用函数和初始化模式。
Lazy(Func,LazyThreadSafetyMode) - 初始化一个新的实例 使用指定初始化函数的Lazy类 线程安全模式。
从线程安全的角度来看,第二个构造函数是否更灵活?哪个LazyThreadSafetyMode
成员是Lazy<...>(..., true)
的类似物?
答案 0 :(得分:4)
来自Reflector:
public Lazy(Func<T> valueFactory, bool isThreadSafe) : this(valueFactory, isThreadSafe ?LazyThreadSafetyMode.ExecutionAndPublication : LazyThreadSafetyMode.None)
{
}
因此,如果您通过true
,则会转换为LazyThreadSafetyMode.ExecutionAndPublication
。
false
将转换为LazyThreadSafetyMode.None
顺便说一下,如果你只传递了价值因素(完全省略了bool),它就会使用LazyThreadSafetyMode.ExecutionAndPublication
。
答案 1 :(得分:0)
如果您传递true
,则使用ExecutionAndPublication
延迟模式初始化对象。如果您通过false
,则会使用None
模式初始化对象。
如果使用不采用布尔值的重载,则使用ExecutionAndPublication
模式初始化。