В проекте C # у меня есть (изменчивый) транзакционный ресурс, зачисленный в System.Transactions.Transaction
.
Когда происходит тайм-аут транзакции, откат выполняется в рабочем потоке: очевидно, транзакция использует таймер и вызывает обратный вызов таймера, когда таймер истекает (очень мало документации от Microsoft по этому вопросу). Таким образом, реализация IEnlistmentNotification.Rollback(...
) в моем транзакционном ресурсе вызывается асинхронно.
Мой вопрос: как мне справиться с этим? Конечно, код отката изменяет внутреннее состояние моего ресурса, например, отменив изменения. Похоже, я должен синхронизировать весь доступ к этому ресурсу. Однако ресурс не предназначен для сохранения потоков. У кого-нибудь есть опыт решения этой проблемы или есть какая-то "лучшая практика" для этого?