Пример альтернативы событию TransactionCompleted?

Из записи MSDN для TransactionCompleted:

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

Внимание! Регистрация этого события отрицательно влияет на производительность транзакции, к которой оно присоединено.

У кого-нибудь есть пример или даже объяснение того, как подключиться к транзакции, чтобы просто получить уведомление о ее завершении?

1 ответ

Решение

MSDN может вводить в заблуждение здесь. Регистрация события должна быть, по крайней мере, такой же быстрой, как и привлечение фиктивного менеджера ресурсов (не то, чтобы я это проверял).

Дело в том, что, если вы подключитесь, транзакция станет распределенной (поскольку сейчас задействовано как минимум два менеджера ресурсов). Такая транзакция медленнее (больше операций ввода-вывода с сервером базы данных или с чем бы вы ни работали).

Вы все еще можете попробовать подключить способ. Просто реализовать IEnlistmentNotification и позвонить enlistment.Done() в каждом методе. Вы также хотите добавить свой код в Commit() метод.

Затем передайте ссылку на вашу реализацию транзакции EnlistVolatile(..) метод (с параметрами, установленными в None).

Другие вопросы по тегам