Вопрос про Lazy<T>
От: SergASh  
Дата: 01.12.17 13:51
Оценка:
Привет всем!

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

Вот наивная версия
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 умеет без блокировок работать?

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.