【发布时间】:2014-10-21 04:38:48
【问题描述】:
我一直在阅读有关此 Asynchronous article from MSDN 的信息,但我无法理解给定示例中 Lazy<T> 的用途。
public class AsyncCache<TKey, TValue>
{
private readonly Func<TKey, Task<TValue>> _valueFactory;
private readonly ConcurrentDictionary<TKey, Lazy<Task<TValue>>> _map;
public AsyncCache(Func<TKey, Task<TValue>> valueFactory)
{
if (valueFactory == null) throw new ArgumentNullException("loader");
_valueFactory = valueFactory;
_map = new ConcurrentDictionary<TKey, Lazy<Task<TValue>>>();
}
public Task<TValue> this[TKey key]
{
get
{
if (key == null) throw new ArgumentNullException("key");
return _map.GetOrAdd(key, toAdd =>
new Lazy<Task<TValue>>(() => _valueFactory(toAdd))).Value;
}
}
}
据我了解,当您调用.Value 或Lazy<T> 时,它会调用其中的构造函数。从例子看是马上调用的,为什么要加Lazy<T>呢?
【问题讨论】:
标签: c# asynchronous lazy-initialization