예제 #1
0
        /// <summary>
        /// Provides a temporary release of the lock if it is acquired.  When the
        /// disposable object that is returned is disposed, the lock is re-acquired.
        /// This method is effectively the opposite of acquire.
        /// </summary>
        /// <returns></returns>
        public IDisposable ReleaseAcquire()
        {
            var timeLockRequested = PerformanceObserver.MicroTime;
            var disposableLock    = _subLock.ReleaseAcquire();
            var timeLockAcquired  = PerformanceObserver.MicroTime;
            var disposableTrack   = new TrackedDisposable(
                delegate
            {
                disposableLock.Dispose();
                disposableLock = null;
                FinishTrackingPerformance(timeLockRequested, timeLockAcquired);
            });

            return(disposableTrack);
        }