public void TestPool() { var locker = new ReadWriteLockAsync(); Task.Run(async() => { await locker.EnterReadLock(); await Task.Delay(1000); locker.ExitReadLock(); }); Task.Run(async() => { await locker.EnterReadLock(); await Task.Delay(1000); locker.ExitReadLock(); }); Task.Run(async() => { await locker.EnterReadLock(); await Task.Delay(1000); locker.ExitReadLock(); }); Task.Run(async() => { await locker.EnterWriteLock(); await Task.Delay(1000); locker.ExitWriteLock(); }); Task.Run(async() => { await locker.EnterReadLock(); await Task.Delay(1000); locker.ExitReadLock(); }); }