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)); }
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)); }
internal static Task <IAsyncDisposable> AcquireLockAsync(this IDatabase db, Guid sagaId, TimeSpan?expiry, TimeSpan?retryTimeout) => DataCacheLock.AcquireAsync(db, sagaId, expiry, retryTimeout);