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