public static async Task AsyncReaderWriterLock() { var obj = new object(); var holder1 = await obj.AcquireReadLockAsync(TimeSpan.Zero); if (holder1) { } else { throw new Exception(); } var holder2 = await obj.AcquireReadLockAsync(TimeSpan.Zero); if (holder2) { } else { throw new Exception(); } await ThrowsAsync <TimeoutException>(() => obj.AcquireWriteLockAsync(TimeSpan.Zero)); holder1.Dispose(); holder2.Dispose(); holder1 = await obj.AcquireWriteLockAsync(TimeSpan.Zero); if (holder1) { } else { throw new Exception(); } holder1.Dispose(); }