Пример #1
0
            public static Task <IAsyncDisposable> AcquireAsync(IDatabase db, Guid sagaId, TimeSpan?expiry, TimeSpan?retryTimeout)
            {
                var dataCacheLock = new DataCacheLock(db, sagaId, expiry);

                async Task <IAsyncDisposable> TakeLock()
                {
                    try
                    {
                        var result = await db.LockTakeAsync(dataCacheLock._key, dataCacheLock._token, dataCacheLock._expiry ?? TimeSpan.MaxValue)
                                     .ConfigureAwait(false);

                        if (result)
                        {
                            return(dataCacheLock);
                        }
                    }
                    catch
                    {
                    }

                    return(null);
                }

                return(RetryUntilTrueAsync(TakeLock, retryTimeout));
            }
Пример #2
0
        public static Task <IAsyncDisposable> AcquireLockAsync(this IDatabase db, Guid sagaId, TimeSpan?expiry = null, TimeSpan?retryTimeout = null)
        {
            if (db == null)
            {
                throw new ArgumentNullException(nameof(db));
            }

            if (sagaId == null)
            {
                throw new ArgumentNullException(nameof(sagaId));
            }

            return(DataCacheLock.AcquireAsync(db, sagaId, expiry, retryTimeout));
        }
Пример #3
0
 internal static Task <IAsyncDisposable> AcquireLockAsync(this IDatabase db, Guid sagaId, TimeSpan?expiry, TimeSpan?retryTimeout) =>
 DataCacheLock.AcquireAsync(db, sagaId, expiry, retryTimeout);