public bool TryLock(out IDisposable managedLock, int millisecondsTimeout) { var managedTryLock = new ManagedLock(this); managedLock = null; managedTryLock.Disposed += (sender, e) => { lock (internalLockObject) { this.Locks.Remove(e.Value); } }; var locked = managedTryLock.TryLock(millisecondsTimeout); if (locked) { managedLock = managedTryLock; lock (internalLockObject) { this.Locks.Add(managedTryLock); } } return(locked); }
public IDisposable Lock() { var managedLock = new ManagedLock(this); managedLock.Disposed += (sender, e) => { lock (internalLockObject) { this.RemoveLock(e.Value); } }; lock (internalLockObject) { this.AddLock(managedLock); } managedLock.Lock(); return(managedLock); }
internal void AddLock(ManagedLock _lock) { LockSet(() => locks.Add(_lock)); }
internal void RemoveLock(ManagedLock _lock) { LockSet(() => locks.Remove(_lock)); }