public async Task <LockResponse> ProcessAsync(LockRequest request, CancellationToken cancellationToken = default) { try { long token; var requestedDuration = request.Duration.ToTimeSpan(); if (requestedDuration.Ticks == 0) { _logger.DebugEvent("ProcessAsync.ReleaseAsync", new { Request = request }); token = await _store.ReleaseAsync(request.Key, request.Token, cancellationToken).ConfigureAwait(false); } else if (request.Token >= 0) { _logger.DebugEvent("ProcessAsync.UpdateDurationAsync", new { Request = request }); token = await _store.UpdateAsync(request.Key, request.Token, requestedDuration, cancellationToken).ConfigureAwait(false); } else { _logger.DebugEvent("ProcessAsync.AcquireAsync", new { Request = request }); token = await _store.AcquireAsync(request.Key, requestedDuration, cancellationToken).ConfigureAwait(false); } return(new LockResponse() { Key = request.Key, Token = token, }); } catch (Exception ex) { _logger.ErrorEvent(ex, "ProcessAsync.Error", new { Request = request, ErrorMsg = ex.Message, }); return(new LockResponse() { Key = request.Key, Token = -1, }); } }