コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 internal void AddLock(ManagedLock _lock)
 {
     LockSet(() => locks.Add(_lock));
 }
コード例 #4
0
 internal void RemoveLock(ManagedLock _lock)
 {
     LockSet(() => locks.Remove(_lock));
 }