01.12.2017 Вопрос про Lazy T
 
Привет всем!

Есть контейнер, который выставляет наружу лениво инициализирующийся ресурс.
Вопрос: как потокобезопасно выполнить метод ресурса, но только если он был проинициализирован?

Вот наивная версия
public interface IResource
{
  void Reset();
}

public class Container
{
  public IResource Resource { get { return resource_.Value; } }
  
  public void ResetResource() 
  {
    if ( resource_.IsValueCreated )
    {
      resource_.Value.Reset();
    }
  }

  private Lazy<IResource> resource_ = new Lazy<IResource>( () => new Resource() );
}

Понятно, что можно lock использовать, но может есть способ поумней, учитывая что сам Lazy умеет без блокировок работать?

Спасибо.