Подтвердить что ты не робот

Как правильно использовать TransactionScope?

Я всегда хочу попробовать использовать TransactionScope, но я просто не могу понять, что люди видят в этом, что полезно. Итак, возьмем пример:

using(TransactionScope tran = new TransactionScope()) {
    CallAMethodThatDoesSomeWork1();
    CallAMethodThatDoesSomeWork2();
    tran.Complete();
}

Итак, самый основной вопрос: как написать "CallAMethodThatDoesSomeWork1()", чтобы он знал, как отбросить свои действия, если пусть "CallAMethodThatDoesSomeWork2()" выдает исключение?

4b9b3361

Ответ 1

Код в методах, которые вы вызываете, должен быть осведомлен о транзакции и завершать активную транзакцию. Это означает создание или использование классов, которые являются менеджерами ресурсов (см. Внедрение собственного менеджера ресурсов.

Вы делаете это, реализуя IEnlistmentNotification и завершая транзакцию. Когда транзакция будет завершена, менеджер транзакций вызовет методы, определенные на этом интерфейсе, чтобы ваш код мог выполнять/отменять работу.