コード例 #1
0
        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);
            }
コード例 #2
0
 public static async Task RetryOnExceptionAsync(this IAPIContext context, int times, Func <Task> operation)
 {
     await context.RetryOnExceptionAsync <Exception>(times, operation);
 }