public async Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next) { TResponse response = default; IDbContextTransaction transaction = default; try { await _dbContext.RetryOnExceptionAsync(_retryCount, async() => { _logger.LogInformation($"Begin transaction {typeof(TRequest).Name}", request); transaction ??= await _dbContext.BeginTransactionAsync(cancellationToken); response = await next(); await _dbContext.CommitTransactionAsync(transaction, cancellationToken); _logger.LogInformation($"Committed transaction {typeof(TRequest).Name}", request); }); return(response); }
public static async Task RetryOnExceptionAsync(this IAPIContext context, int times, Func <Task> operation) { await context.RetryOnExceptionAsync <Exception>(times, operation); }