5
使用C#/ .NET 4.0,Lazy<T>
對象可以聲明如下。System.Lazy <T>和System.Threading.LazyThreadSafetyMode枚舉
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(即在初始工廠方法之後沒有線程安全性)。