Нужно ли использовать токен отмены при массовом запуске ExecuteUpdateAsync?C#

Место общения программистов C#
Anonymous
Нужно ли использовать токен отмены при массовом запуске ExecuteUpdateAsync?

Сообщение Anonymous »

У меня есть код ниже, в котором я вызываю службу для получения данных, а затем сохраняю данные в списке (передачи). Затем я просматриваю каждую передачу, чтобы обновить определенную строку в базе данных.
ВОПРОСЫ -
  • Нужно ли мне это делать? использовать токен отмены транзакции?
  • Если да, что мне делать, если выдается исключение базы данных?
  • Это лучший способ обновить большое количество строк (пример 500)?

Код: Выделить всё

var service = new BalanceTransactionService();
var transfers = new List();

await foreach(BalanceTransaction balTransaction in service.ListAutoPagingAsync(listOptions, requestOptions)) {
var charge = (Stripe.Charge)balTransaction.Source;
transfers.Add((charge.SourceTransferId, balTransaction.ExchangeRate, balTransaction.Amount, balTransaction.Currency, stripePayoutId));
}

CancellationToken cancellationToken = new CancellationToken();
using var transaction = await _dbContext.Database.BeginTransactionAsync(cancellationToken);

try {

foreach(var transfer in transfers) {
var stripeTransfersResult = await _dbContext.StripeTransfers
.Where(p => p.TransferId == transfer.Item1)
.ExecuteUpdateAsync(setters => setters
.SetProperty(p => p.ExchangeRate, transfer.Item2)
.SetProperty(p => p.ExchangeAmount, transfer.Item3)
.SetProperty(p => p.ExchangeCurrency, transfer.Item4)
.SetProperty(p => p.StripePayoutId, transfer.Item5)
.SetProperty(p => p.EditedDate, DateTime.UtcNow)
);
}

await transaction.CommitAsync(cancellationToken);

} catch (DbException ex) {
// rollback if error
await transaction.RollbackAsync(cancellationToken);
_logger.LogInformation("Results not saved when associating payout with transfers. Stripe Payout Id: " + stripePayoutId);
_emailService.SendEmailMessage(EmailType.Exceptions, "ReconcileTransferQueue Exception", "Exception thrown when associating payout with transfers.
Stripe Payout Id: " + stripePayoutId + "
Exception:
" + ex.ToString(), true);
}



Подробнее здесь: https://stackoverflow.com/questions/786 ... pdateasync

Вернуться в «C#»