.NET: асинхронный откат из-за тайм-аута транзакции - PullRequest
2 голосов
/ 21 января 2009

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

Мой вопрос: как мне справиться с этим? Конечно, код отката изменяет внутреннее состояние моего ресурса, например, отменив изменения. Похоже, я должен синхронизировать весь доступ к этому ресурсу. Однако ресурс не предназначен для сохранения потоков. У кого-нибудь есть опыт решения этой проблемы или есть какая-то "лучшая практика" для этого?

1 Ответ

0 голосов
/ 25 октября 2010

Полагаю, вы могли бы заблокировать методы отката ресурсов, чтобы сделать их синхронизированными, поскольку откат был бы нечетным случаем, и сериализационный доступ не вызвал бы особых проблем с производительностью ...

С IoC, например Виндзор, реализовать IInterceptor и заблокировать все методы IResource.Rollback () с помощью перехватчика. Это ортогональная проблема, поэтому она должна быть реализована как единое целое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...