private Result CreateSuccessResult <TLockCookie>(ISqlSynchronizationStrategy <TLockCookie> strategy, string lockName, TLockCookie lockCookie) where TLockCookie : class { var nonThreadSafeHandle = new ReleaseAction(() => this.ReleaseNoLock(strategy, lockName, lockCookie)); var threadSafeHandle = new ThreadSafeReleaseAction(this.mutex, nonThreadSafeHandle); this.outstandingHandles.Add(lockName, new HandleReference(threadSafeHandle: threadSafeHandle, nonThreadSafeHandle: nonThreadSafeHandle)); return(new Result(threadSafeHandle)); }
public HandleReference(ThreadSafeReleaseAction threadSafeHandle, ReleaseAction nonThreadSafeHandle) { this.ThreadSafeHandle = new WeakReference <ThreadSafeReleaseAction>(threadSafeHandle); this.NonThreadSafeHandle = nonThreadSafeHandle; }