.NET库中是否有任何可用作Lazy<T>
过期的类?
这个想法是将Func<T>
值工厂lambda传递到那里,并且仅在第一次或超时时调用。
我创建了简单的类来做到这一点,但我想避免发明轮子。
public class ExpiringLazy<T>
{
private readonly object valueGetLock = new object();
private readonly Func<T> valueFactory;
private readonly TimeSpan timeout;
private T cachedValue;
private DateTime cachedTime;
public T Value
{
get
{
Thread.MemoryBarrier();
if (cachedTime.Equals(default(DateTime)) || DateTime.UtcNow > cachedTime + timeout)
{
lock (valueGetLock)
{
if (cachedTime.Equals(default(DateTime)) || DateTime.UtcNow > cachedTime + timeout)
{
cachedValue = valueFactory();
Thread.MemoryBarrier();
cachedTime = DateTime.UtcNow;
}
}
}
return cachedValue;
}
}
public ExpiringLazy(Func<T> valueFactory, TimeSpan timeout)
{
if (valueFactory == null) throw new ArgumentNullException(nameof(valueFactory));
this.valueFactory = valueFactory;
this.timeout = timeout;
}
}
最佳答案
不,框架中没有等效的类。
请注意,您的类没有Lazy<T>
所具有的高级锁定等。看一看this answer,看看如何有效地做到这一点。
关于c# - Lazy <T>类即将过期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34791884/