【发布时间】:2012-12-14 00:30:48
【问题描述】:
使用 C#/.NET 4.0,Lazy<T> 对象可以声明如下。
using System;
using System.Threading;
...
var factory = () => { return new object(); };
var lazy = new Lazy<object>(factory, LazyThreadSafetyMode.ExecutionAndPublication);
LazyThreadSafetyMode 枚举中的其他选项是 PublicationOnly 和 None。
为什么没有ExecutionOnly 选项?
这种情况下的行为是工厂方法最多被单个线程调用一次,即使多个线程尝试获取lazy.Value。一旦工厂方法完成并缓存了单个结果,许多线程将能够同时访问lazy.Value(即在初始工厂方法之后没有线程安全)。
【问题讨论】:
标签: c# .net-4.0 lazy-initialization