Lazy <t>和LazyInit <t> </t> </t>之间的区别

时间:2011-03-22 00:35:51

标签: c# .net lazy-loading lazy-evaluation

我在使用的课程中有以下几行。

 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是否相等?

1 个答案:

答案 0 :(得分:6)

有效,是的。通过设置LazyThreadSafetyMode.ExecutionAndPublication,您只是希望单个线程能够构造Lazy<T>,这有效地“确保单个执行”构建阶段。 PublicationOnly将允许多个线程运行构造函数,但只存储一个结果(第一个完成)。