private static void Release([NotNull] object key) { InnerLock _lock; lock (Locks) { lock (_lock = Locks[key]) { _lock.Release(); if (_lock.CanDispose) { Locks.Remove(key); _lock.Dispose(); } } } }
private void ReleaseLock() { lock (sync) { if (lockID == Guid.Empty) { throw new InvalidOperationException("This instance cannot " + "be unlocked because no lock currently exists."); } object currentLock; Locks.TryGetValue(lockID, out currentLock); if (currentLock == SlotMarker) { Locks.Remove(lockID); lockID = Guid.Empty; } else { throw new InvalidOperationException("Unlock must be invoked " + "from same thread that invoked Lock."); } } }