Привет всем!
Есть контейнер, который выставляет наружу лениво инициализирующийся ресурс.
Вопрос: как потокобезопасно выполнить метод ресурса, но только если он был проинициализирован?
Вот наивная версия
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 умеет без блокировок работать?
Спасибо.