23.03.2012, 09:56 | #21 |
Участник
|
|
|
23.03.2012, 12:11 | #22 |
Участник
|
Гарантия в том, что ошибка при выполнении первого потока (БЛ) не остановит выполнение второго (ЧТ).В моем примере я четко указал на Throw error();
Если речь идет о полном отрубании электричества, крахом сервера и т.д. во время выполнения БЛ, то тут я бы использовал не таблицу лога запусков, а журнал запусков, где бы порекомендовал воспользоваться советом Alexanderis.ua. - аналогия разноски журналов.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
07.04.2020, 20:31 | #23 |
Участник
|
Ух. Подниму тему из больших глубин, тем более, в ней поучаствовали много моих бывших коллег из "самого крупного department store".
Интересует именно изначальная формулировка темы: Цитата:
можно ли поймать остановку выполнения кода из дебаггера?
Есть код синхронизации транзакций DAX и внешних соединений, основывается на обработке Application.ttsNotify* (подсмотрено у Коламбуса). Основной подход в коде: X++: connection = new UserConnection(); RegisterExternalConnection(connection ); try ttsBegin; connection.ttsBegin(); ... ttsCommit; Все работает в любых случаях, проблем нет - либо подтверждается, либо откатывается. Но, как говорят, есть нюанс. Если идти в отладчике и внутри транзакции сказать "Прекратить отладку", то Application.ttsNotify* не отрабатывает. В итоге поймать момент, когда нужно вызвать connection.ttsabort() не получается, пока не закрою клиента транзакция внешнего соединения висит. Все бы ничего, но в одном из кейсов во внешнем соединении вызывается мъютекс MS SQL SP_GETAPPLOCK и это дает некоторые не очень приятные последствия. Пока на DEV это еще не страшно, но на PROD некоторое время пользователи недовольны, так как есть еще другие места использования мъютекса. Соответственно вопрос: можно ли поймать остановку выполнения кода из дебаггера? Последний раз редактировалось Raven Melancholic; 07.04.2020 в 20:38. |
|
07.04.2020, 23:58 | #24 |
Участник
|
Не проверял, но может попробовать поймать исключение break?
|
|
08.04.2020, 00:08 | #25 |
Участник
|
Можно в инфолог повесить циклический вызов метода каждые 5 секунд (по аналогии с warchdog) А в методе проверять жива ли транзакция. Если жива, то назначать следующий вызов через 5 секунд. Если нежива то проверять внешнее соединение. Если не закрыто то откатывать транзакцию и закрывать.
Как узнать жива ли транзакция? Проверить appl.Ttslevel() . Если транзакция открыта то проверииь ее номер. Кажется счетчик возвращается методом xApplication.CurTtslevel() или как то так. Точнее завтра напишу когда буду за компом. |
|
08.04.2020, 09:43 | #26 |
Участник
|
имел в виду
\Classes\Info\watchDog \Classes\Info\autologOff \Classes\Info\addTimeOut имел в виду \System Documentation\Classes\xApplication\curTransactionId Это, собственно, не ловля остановки выполнения кода из дебагера (я думаю это невозможно), но обходной маневр, который позволяет решить вашу проблему. |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (5). |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|