我在使用的课程中有以下几行。
private static readonly LazyInit<TestClass> _instance = new LazyInit<TestClass>(() => new TestClass(), LazyInitMode.EnsureSingleExecution);
有一天,我希望受益于.NET 4附带的所有新功能,安装它并彻底解决问题。
我的LazyInit不再工作了。所以我用Lazy&lt; T&gt;代替了每一次出现。但是关于
LazyInitMode.EnsureSingleExecution
?
我以为那会是LazyThreadSafetyMode.ExecutionAndPublication
。
private static Lazy<LookupService> s_instance = new Lazy<LookupService>(() => new LookupService(), LazyThreadSafetyMode.ExecutionAndPublication);
这两个declerations是否相等?
答案 0 :(得分:6)
有效,是的。通过设置LazyThreadSafetyMode.ExecutionAndPublication
,您只是希望单个线程能够构造Lazy<T>
,这有效地“确保单个执行”构建阶段。 PublicationOnly
将允许多个线程运行构造函数,但只存储一个结果(第一个完成)。