Отмена EFCore при асинхронных перегрузках IDbContextTransaction

#entity-framework-core

#entity-framework-core

Вопрос:

В настоящее время я разрабатываю что-то, что в значительной степени зависит от блокировки небольшой таблицы. Я задался вопросом, в чем смысл transaction.RollbackAsync(CancellationToken) (или аналогичный transaction.CommitAsync(CancellationToken) ). Разве не должно быть гарантировано, что транзакция будет откатываться / фиксироваться при вызове? Я действительно не вижу особого смысла в отмене такой операции. В сценарии, когда я получаю полную блокировку таблицы с использованием транзакции IsolationLevel.Serializable , а затем отменяю ее во время моих следующих операций над таблицей, в конечном итоге вызов отката или фиксации никогда не будет выполнен, если токен уже установлен IsCancellationRequested true (или, что еще хуже, выбрасывается при отмене).

Итак, просто для понимания, может кто-нибудь объяснить мне, почему они даже получили эту перегрузку? Безопасно ли это использовать или имеет ли смысл их использовать? Должен ли я даже рассмотреть возможность фиксации / отката транзакции с использованием await ? Я имею в виду, что база данных наверняка снимает блокировку и отменяет транзакцию при отключении, но это, вероятно, занимает больше времени, чем ее чистое освобождение по назначению.