public RedLockRelease(
     IRedLockReleasableSynchronizationPrimitive primitive,
     IReadOnlyDictionary <IDatabase, Task <bool> > tryAcquireOrRenewTasks)
 {
     this._primitive = primitive;
     this._tryAcquireOrRenewTasks = tryAcquireOrRenewTasks;
 }
Beispiel #2
0
        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
                                            );
        }