Один из примеров использования Task
Я нашел на MSDN (found here) кажется довольно странным. Существует ли какая-либо причина для класса Lazy<T>
?Есть ли какие-либо цели для 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;
}
}
}
Как только Lazy<Task<TValue>>
создан, он немедленно доступны. Если к нему обращаются немедленно, то использование Lazy<T>
только добавляет дополнительные служебные данные и делает этот пример более запутанным, чем нужно. Разве я здесь что-то не хватает?