andrew4582

ConcurrentValue

Aug 4th, 2010
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.13 KB | None | 0 0
  1. public class ConcurrentValue<T> {
  2.     readonly object _sync;
  3.     T _value;
  4.     Func<T> _createValueFunc;
  5.     bool _created;
  6.  
  7.     public ConcurrentValue() { _sync = new object(); }
  8.     public ConcurrentValue(Func<T> valueFunction) : this() { _createValueFunc = valueFunction; }
  9.  
  10.     public T Value {
  11.         get {
  12.             bool locktaken = false;
  13.             try {
  14.                 Monitor.Enter(_sync,ref  locktaken);
  15.                 if(_value == null) {
  16.                     _value = _createValueFunc();
  17.                     _created = true;
  18.                 }
  19.             }
  20.             finally {
  21.                 if(locktaken)
  22.                     Monitor.Exit(_sync);
  23.             }
  24.             return _value;
  25.         }
  26.     }
  27.     public void ResetValue() {
  28.         bool locktaken = false;
  29.         try {
  30.             Monitor.Enter(_sync,ref  locktaken);
  31.             _value = default(T);
  32.             _created = false;
  33.         }
  34.         finally {
  35.             if(locktaken)
  36.                 Monitor.Exit(_sync);
  37.         }
  38.     }
  39.     public bool IsValueCreated {
  40.         get {
  41.             return _created;
  42.         }
  43.     }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment