public RedLockRelease( IRedLockReleasableSynchronizationPrimitive primitive, IReadOnlyDictionary <IDatabase, Task <bool> > tryAcquireOrRenewTasks) { this._primitive = primitive; this._tryAcquireOrRenewTasks = tryAcquireOrRenewTasks; }
public static void FireAndForgetReleaseUponCompletion(IRedLockReleasableSynchronizationPrimitive primitive, IDatabase database, Task <bool> acquireOrRenewTask) { if (ReturnedFalse(acquireOrRenewTask)) { return; } acquireOrRenewTask.ContinueWith(async(t, state) => { // don't clean up if we know we failed if (!ReturnedFalse(t)) { await primitive.ReleaseAsync((IDatabase)state, fireAndForget: true).ConfigureAwait(false); } }, state: database ); }