.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/