Ух. Подниму тему из больших глубин, тем более, в ней поучаствовали много моих бывших коллег из "самого крупного department store".
Интересует именно изначальная формулировка темы:
Цитата:
можно ли поймать остановку выполнения кода из дебаггера?
Ситуация следующая.
Есть код синхронизации транзакций DAX и внешних соединений, основывается на обработке Application.ttsNotify* (подсмотрено у Коламбуса). Основной подход в коде:
X++:
connection = new UserConnection();
RegisterExternalConnection(connection );
try
ttsBegin;
connection.ttsBegin();
...
ttsCommit;
В общем, когда срабатывает Application.ttsNotifyCommit подтверждаем и внешние соединения, когда срабатывает Application.ttsNotifyAbort откатываем внешние соединения.
Все работает в любых случаях, проблем нет - либо подтверждается, либо откатывается. Но, как говорят, есть нюанс. Если идти в отладчике и внутри транзакции сказать "Прекратить отладку", то Application.ttsNotify* не отрабатывает.
В итоге поймать момент, когда нужно вызвать connection.ttsabort() не получается, пока не закрою клиента транзакция внешнего соединения висит.
Все бы ничего, но в одном из кейсов во внешнем соединении вызывается мъютекс MS SQL
SP_GETAPPLOCK и это дает некоторые не очень приятные последствия. Пока на DEV это еще не страшно, но на PROD некоторое время пользователи недовольны, так как есть еще другие места использования мъютекса.
Соответственно вопрос:
можно ли поймать остановку выполнения кода из дебаггера?