internal static DynamicProxy Get(Type type) { DynamicProxy proxy; using (var readLock = ReadWriteLocker.AcquireReadLock()) { _cache.TryGetValue(type, out proxy); } return(proxy); }
public void CreateNewWrite() { var locker = ReadWriteLocker.Create <List <int> >(); using (locker.Write()) { FillList(locker); // ReadWriteLocker supports implicit cast into the wrapped type Assert.IsTrue(locker.Lock.IsWriteLockHeld); Assert.IsFalse(locker.Lock.IsReadLockHeld); } Assert.IsFalse(locker.Lock.IsWriteLockHeld); Assert.IsFalse(locker.Lock.IsReadLockHeld); Assert.AreEqual(3, locker.Value.Count); }
public void CreateRead() { var list = new List <int> { 2, 4, 8 }; var locker = ReadWriteLocker.Create(list); using (locker.Read()) { Assert.IsFalse(locker.Lock.IsWriteLockHeld); Assert.IsTrue(locker.Lock.IsReadLockHeld); CollectionAssert.AreEqual(new[] { 2, 4, 8 }, locker.Value); } Assert.IsFalse(locker.Lock.IsWriteLockHeld); Assert.IsFalse(locker.Lock.IsReadLockHeld); }
internal static DynamicProxy GetOrAdd(Type type) { DynamicProxy proxy = null; using (var readLock = ReadWriteLocker.AcquireUpgradeableReadLock()) { if (!_cache.TryGetValue(type, out proxy)) { using (var writeLock = readLock.UpgradeToWriterLock()) { proxy = type.CreateProxy(); _cache.GetOrAdd(type, proxy); } } return(proxy); } }