public bool TryAcquireWriteLock(TimeSpan timeout, out IWriteLockAcquisition writeLockAcquisition) { if (Owner.InternalLock.RecursionPolicy == LockRecursionPolicy.NoRecursion && (Owner.InternalLock.IsReadLockHeld || Owner.InternalLock.IsUpgradeableReadLockHeld || Owner.InternalLock.IsWriteLockHeld)) { writeLockAcquisition = null; return false; } if (Owner.InternalLock.RecursionPolicy == LockRecursionPolicy.SupportsRecursion && !(Owner.InternalLock.IsUpgradeableReadLockHeld || Owner.InternalLock.IsWriteLockHeld)) { writeLockAcquisition = null; return false; } var ok = Owner.InternalLock.TryEnterWriteLock(timeout); writeLockAcquisition = new WriteLockAcquisition(Owner); return true; }
public bool TryAcquireWriteLock(TimeSpan timeout, out IWriteLockAcquisition writeLockAcquisition) { if (Owner.InternalLock.RecursionPolicy == LockRecursionPolicy.NoRecursion && (Owner.InternalLock.IsReadLockHeld || Owner.InternalLock.IsUpgradeableReadLockHeld || Owner.InternalLock.IsWriteLockHeld)) { writeLockAcquisition = null; return false; } if (Owner.InternalLock.RecursionPolicy == LockRecursionPolicy.SupportsRecursion && !(Owner.InternalLock.IsUpgradeableReadLockHeld || Owner.InternalLock.IsWriteLockHeld)) { writeLockAcquisition = null; return false; } var disposables = (IDisposable)null; var ok = Owner.TryLockChildren(LockTypes.Write, timeout, out disposables); if (ok) { ok = Owner.InternalLock.TryEnterWriteLock(timeout); if (ok) { writeLockAcquisition = new WriteLockAcquisition(Owner, disposables); return true; } else { disposables?.Dispose(); } } writeLockAcquisition = null; return false; }
public bool TryAcquireWriteLock(TimeSpan timeout, out IWriteLockAcquisition writeableLockAcquisition) { if (InternalLock.RecursionPolicy == LockRecursionPolicy.NoRecursion && (InternalLock.IsReadLockHeld || InternalLock.IsUpgradeableReadLockHeld || InternalLock.IsWriteLockHeld)) { writeableLockAcquisition = null; return false; } if (InternalLock.RecursionPolicy == LockRecursionPolicy.SupportsRecursion && !(InternalLock.IsUpgradeableReadLockHeld || InternalLock.IsWriteLockHeld)) { writeableLockAcquisition = null; return false; } if (InternalLock.TryEnterWriteLock(timeout)) { writeableLockAcquisition = new WriteLockAcquisition(owner: this); return true; } else { writeableLockAcquisition = null; return false; } }