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); } }
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); }