Ленивый <T> со временем истечения

Я хочу реализовать время истечения для объекта Lazy. Время истечения срока действия должно начинаться с первого получения значения. Если мы получим значение и истечет время истечения, то мы повторно запустим функцию и сбросим время истечения.

Я не знаком с расширениями, частичным ключевым словом, и я неЯ не знаю лучший способ сделать это.

Спасибо

РЕДАКТИРОВАТЬ :

Код до сих пор:

НОВОЕ РЕДАКТИРОВАНИЕ:

новый код:

public class LazyWithExpiration
{
    private volatile bool expired;
    private TimeSpan expirationTime;
    private Func func;
    private Lazy lazyObject;

    public LazyWithExpiration( Func func, TimeSpan expirationTime )
    {
        this.expirationTime = expirationTime;
        this.func = func;

        Reset();
    }

    public void Reset()
    {
        lazyObject = new Lazy( func );
        expired = false;
    }

    public T Value
    {
        get
        {
            if ( expired )
                Reset();

            if ( !lazyObject.IsValueCreated )
            {
                Task.Factory.StartNew( () =>
                {
                    Thread.Sleep( expirationTime );
                    expired = true;
                } );
            }

            return lazyObject.Value;
        }
    }

}

Ответы на вопрос(2)

Ваш ответ на вопрос