public async Task CanEnterLocksAync() { var myLock = new AsyncReaderWriterLockSlim(); await myLock.EnterReadLockAsync(); Assert.IsTrue(await myLock.TryEnterReadLockAsync(0)); Assert.IsFalse(await myLock.TryEnterWriteLockAsync(0)); myLock.ExitReadLock(); myLock.ExitReadLock(); await myLock.EnterWriteLockAsync(); Assert.IsFalse(await myLock.TryEnterReadLockAsync(0)); Assert.IsFalse(await myLock.TryEnterWriteLockAsync(0)); myLock.ExitWriteLock(); }
public async Task MixedSyncAndAsync() { var myLock = new AsyncReaderWriterLockSlim(); myLock.EnterReadLock(); await myLock.EnterReadLockAsync(); myLock.ExitReadLock(); myLock.ExitReadLock(); myLock.EnterWriteLock(); Assert.IsFalse(await myLock.TryEnterWriteLockAsync(10)); myLock.ExitWriteLock(); }
public async Task ReleasingOneOfTwoReadLocksDoesNotReleaseWaitingWriteAndReadLocks() { var myLock = new AsyncReaderWriterLockSlim(); await myLock.EnterReadLockAsync(); await myLock.EnterReadLockAsync(); var writeLockTask = myLock.TryEnterWriteLockAsync(500); var readLockTask = myLock.TryEnterReadLockAsync(300); // When releasing one of the two read locks, the waiting write lock should not // be released, and also the waiting read lock should not be released because of // the waiting write lock. myLock.ExitReadLock(); Assert.IsFalse(await readLockTask); Assert.IsFalse(await writeLockTask); }