public async Task Unlocked_PermitsMultipleReaderLocks() { var @lock = new AsyncKeyedLock <int>(); await @lock.ReaderLockAsync(0); await @lock.ReaderLockAsync(0); }
public async Task ReaderLocked_ReaderReleased_ReaderAndWriterWaiting_DoesNotReleaseReaderOrWriter() { var @lock = new AsyncKeyedLock <int>(); Task readLock, writeLock; await @lock.ReaderLockAsync(0); using (await @lock.ReaderLockAsync(0)) { writeLock = @lock.WriterLockAsync(0); readLock = @lock.ReaderLockAsync(0); } await Task.WhenAll(AsyncHelper.NeverCompletesAsync(writeLock), AsyncHelper.NeverCompletesAsync(readLock)); }
public async Task ReadLocked_PreventsWriterLock() { var @lock = new AsyncKeyedLock <int>(); await @lock.ReaderLockAsync(0); Task <IDisposable> task = @lock.WriterLockAsync(0); await AsyncHelper.NeverCompletesAsync(task); }
public async Task WriteLocked_PreventsReaderLock() { var @lock = new AsyncKeyedLock <int>(); await @lock.WriterLockAsync(0); var task = @lock.ReaderLockAsync(0); await AsyncHelper.NeverCompletesAsync(task); }
public async Task LockReleased_WriteTakesPriorityOverRead() { var @lock = new AsyncKeyedLock <int>(); Task writeLock, readLock; using (await @lock.WriterLockAsync(0)) { readLock = @lock.ReaderLockAsync(0); writeLock = @lock.WriterLockAsync(0); } await writeLock; await AsyncHelper.NeverCompletesAsync(readLock); }