private Task <T> RunTransactionAsync <T>(AccessMode mode, Func <IAsyncTransaction, Task <T> > work, Action <TransactionConfigBuilder> action) { return(TryExecuteAsync(_logger, async() => await _retryLogic.RetryAsync(async() => { var tx = await BeginTransactionWithoutLoggingAsync(mode, action, true).ConfigureAwait(false); try { var result = await work(tx).ConfigureAwait(false); if (tx.IsOpen) { await tx.CommitAsync().ConfigureAwait(false); } return result; } catch { if (tx.IsOpen) { await tx.RollbackAsync().ConfigureAwait(false); } throw; } }).ConfigureAwait(false))); }
private Task <T> RunTransactionAsync <T>(AccessMode mode, Func <IAsyncTransaction, Task <T> > work, TransactionConfig txConfig) { return(TryExecuteAsync(_logger, async() => await _retryLogic.RetryAsync(async() => { var tx = await BeginTransactionWithoutLoggingAsync(mode, txConfig).ConfigureAwait(false); { try { var result = await work(tx).ConfigureAwait(false); await tx.CommitAsync().ConfigureAwait(false); return result; } catch { await tx.RollbackAsync().ConfigureAwait(false); throw; } } }).ConfigureAwait(false))); }