Нужно ли использовать токен отмены при массовом запуске 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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