/// <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); }