我想在 Lazy 对象上实现过期时间。过期冷却必须从第一次检索值开始。如果我们得到值,并且过期时间过去了,那么我们重新执行函数并重置过期时间。
我不熟悉扩展、部分关键字,也不知道最好的方法。
谢谢
编辑 :
到目前为止的代码:
新编辑:
新代码:
public class LazyWithExpiration<T>
{
private volatile bool expired;
private TimeSpan expirationTime;
private Func<T> func;
private Lazy<T> lazyObject;
public LazyWithExpiration( Func<T> func, TimeSpan expirationTime )
{
this.expirationTime = expirationTime;
this.func = func;
Reset();
}
public void Reset()
{
lazyObject = new Lazy<T>( func );
expired = false;
}
public T Value
{
get
{
if ( expired )
Reset();
if ( !lazyObject.IsValueCreated )
{
Task.Factory.StartNew( () =>
{
Thread.Sleep( expirationTime );
expired = true;
} );
}
return lazyObject.Value;
}
}
}