Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ConcurrentValue<T> {
- readonly object _sync;
- T _value;
- Func<T> _createValueFunc;
- bool _created;
- public ConcurrentValue() { _sync = new object(); }
- public ConcurrentValue(Func<T> valueFunction) : this() { _createValueFunc = valueFunction; }
- public T Value {
- get {
- bool locktaken = false;
- try {
- Monitor.Enter(_sync,ref locktaken);
- if(_value == null) {
- _value = _createValueFunc();
- _created = true;
- }
- }
- finally {
- if(locktaken)
- Monitor.Exit(_sync);
- }
- return _value;
- }
- }
- public void ResetValue() {
- bool locktaken = false;
- try {
- Monitor.Enter(_sync,ref locktaken);
- _value = default(T);
- _created = false;
- }
- finally {
- if(locktaken)
- Monitor.Exit(_sync);
- }
- }
- public bool IsValueCreated {
- get {
- return _created;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment