Exemplo n.º 1
0
        public async Task Unlocked_PermitsMultipleReaderLocks()
        {
            var @lock = new AsyncKeyedLock <int>();
            await @lock.ReaderLockAsync(0);

            await @lock.ReaderLockAsync(0);
        }
Exemplo n.º 2
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));
        }
Exemplo n.º 3
0
        public async Task ReadLocked_PreventsWriterLock()
        {
            var @lock = new AsyncKeyedLock <int>();
            await @lock.ReaderLockAsync(0);

            Task <IDisposable> task = @lock.WriterLockAsync(0);
            await AsyncHelper.NeverCompletesAsync(task);
        }
Exemplo n.º 4
0
        public async Task WriteLocked_PreventsReaderLock()
        {
            var @lock = new AsyncKeyedLock <int>();
            await @lock.WriterLockAsync(0);

            var task = @lock.ReaderLockAsync(0);
            await AsyncHelper.NeverCompletesAsync(task);
        }
Exemplo n.º 5
0
        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);
        }