У меня есть класс Lazy
, который лениво оценивает выражение:
public sealed class Lazy<T>
{
Func<T> getValue;
T value;
public Lazy(Func<T> f)
{
getValue = () =>
{
lock (getValue)
{
value = f();
getValue = () => value;
}
return value;
};
}
public T Force()
{
return getValue();
}
}
По сути, я пытаюсь избежать накладных расходов на блокировку объектов после их оценки, поэтому я заменяю getValue
другой функцией при вызове.
Это очевидно работает в моем тестировании, но я не могу знать, взорвется ли это в производственной среде.
Является ли мой класс потокобезопасным? Если нет, что можно сделать, чтобы гарантировать потокобезопасность?