Example #1
0
        public void UseWriteLock_UpgradeFromReadToWrite_Success()
        {
            using var slimLock = new ReaderWriterLockSlim();

            using var upgradeableLock = new AcquireUpgradeableReaderLock(slimLock);

            Assert.True(slimLock.IsUpgradeableReadLockHeld);
            Assert.False(slimLock.IsWriteLockHeld);

            using (upgradeableLock.UseWriteLock())
            {
                Assert.True(slimLock.IsWriteLockHeld);
            }
        }
Example #2
0
        public async Task Ctor_EnterUpgradeableWhenLockIsAlreadyInReadAndUpgrade_ThrowsException()
        {
            var executed = false;

            var slimLock = new ReaderWriterLockSlim();

            slimLock.EnterReadLock();

            await Task.Run(() =>
            {
                using (var upgradeableLock = new AcquireUpgradeableReaderLock(slimLock))
                {
                    Assert.Throws <AcquireLockFailedException>(() =>
                    {
                        executed = true;
                        var _    = upgradeableLock.UseWriteLock(1);
                    });
                }
            });

            Assert.True(executed);
        }