public void LockForWritingWithReadLocks() { using (var datasetLock = new DatasetLock()) { Assert.IsFalse(datasetLock.IsLockedForReading); Assert.IsFalse(datasetLock.IsLockedForWriting); var readLockEventRaised = false; var readUnlockEventRaised = false; var writeLockEventRaised = false; datasetLock.OnLockForReading += (s, e) => { readLockEventRaised = true; }; datasetLock.OnUnlockFromReading += (s, e) => { readUnlockEventRaised = true; }; datasetLock.OnLockForWriting += (s, e) => { writeLockEventRaised = true; }; var key1 = datasetLock.LockForReading(); var task = Task <DatasetLockKey> .Factory.StartNew(datasetLock.LockForWriting); Assert.IsTrue(readLockEventRaised); Assert.IsFalse(readUnlockEventRaised); Assert.IsFalse(writeLockEventRaised); var key2 = datasetLock.LockForReading(); Assert.IsNotNull(key2); Assert.IsTrue(readLockEventRaised); Assert.IsFalse(readUnlockEventRaised); Assert.IsFalse(writeLockEventRaised); datasetLock.RemoveReadLock(key1); Assert.IsTrue(readLockEventRaised); Assert.IsFalse(readUnlockEventRaised); Assert.IsFalse(writeLockEventRaised); datasetLock.RemoveReadLock(key2); var key3 = task.Result; Assert.IsNotNull(key3); Assert.IsTrue(readLockEventRaised); Assert.IsTrue(readUnlockEventRaised); Assert.IsTrue(writeLockEventRaised); } }
public void LockForReadingWithNoLocks() { using (var datasetLock = new DatasetLock()) { Assert.IsFalse(datasetLock.IsLockedForReading); Assert.IsFalse(datasetLock.IsLockedForWriting); var eventWasRaised = false; datasetLock.OnLockForReading += (s, e) => { eventWasRaised = true; }; var key = datasetLock.LockForReading(); Assert.IsNotNull(key); Assert.IsTrue(eventWasRaised); Assert.IsTrue(datasetLock.IsLockedForReading); Assert.IsFalse(datasetLock.IsLockedForWriting); } }
public void LockForReadingWithNoLocks() { using (var datasetLock = new DatasetLock()) { Assert.IsFalse(datasetLock.IsLockedForReading); Assert.IsFalse(datasetLock.IsLockedForWriting); var eventWasRaised = false; datasetLock.OnLockForReading += (s, e) => { eventWasRaised = true; }; var key = datasetLock.LockForReading(); Assert.IsNotNull(key); Assert.IsTrue(eventWasRaised); Assert.IsTrue(datasetLock.IsLockedForReading); Assert.IsFalse(datasetLock.IsLockedForWriting); } }
public void LockForWritingWithReadLocks() { using (var datasetLock = new DatasetLock()) { Assert.IsFalse(datasetLock.IsLockedForReading); Assert.IsFalse(datasetLock.IsLockedForWriting); var readLockEventRaised = false; var readUnlockEventRaised = false; var writeLockEventRaised = false; datasetLock.OnLockForReading += (s, e) => { readLockEventRaised = true; }; datasetLock.OnUnlockFromReading += (s, e) => { readUnlockEventRaised = true; }; datasetLock.OnLockForWriting += (s, e) => { writeLockEventRaised = true; }; var key1 = datasetLock.LockForReading(); var task = Task<DatasetLockKey>.Factory.StartNew(datasetLock.LockForWriting); Assert.IsTrue(readLockEventRaised); Assert.IsFalse(readUnlockEventRaised); Assert.IsFalse(writeLockEventRaised); var key2 = datasetLock.LockForReading(); Assert.IsNotNull(key2); Assert.IsTrue(readLockEventRaised); Assert.IsFalse(readUnlockEventRaised); Assert.IsFalse(writeLockEventRaised); datasetLock.RemoveReadLock(key1); Assert.IsTrue(readLockEventRaised); Assert.IsFalse(readUnlockEventRaised); Assert.IsFalse(writeLockEventRaised); datasetLock.RemoveReadLock(key2); var key3 = task.Result; Assert.IsNotNull(key3); Assert.IsTrue(readLockEventRaised); Assert.IsTrue(readUnlockEventRaised); Assert.IsTrue(writeLockEventRaised); } }