Я часто сталкиваюсь с такой ситуацией в моих приложениях VB6
Private Sub DoSomething
On Error Goto err1
Call ProcessLargeBatch1
Call ProcessLargeBatch2
'... more ...'
Exit Sub
err1:
Call Cleanup 'Specific for DoSomething'
Call HandleError 'General error handling: Logging, message box, ...'
End Sub
Процедура очистки иногда отменяет действия, откатывает транзакцию, удаляет временные файлы и т. Д. В большинстве случаев эта операция также может быть неудачной.
Что мне делать в этом случае? Я бы добавил On Error Resume Next
в обработчик ошибок, но он удаляет существующий объект Err
. Добавление обработчика ошибок к Cleanup
имеет ту же проблему.
Каков наилучший способ гарантировать, что исходные ошибки все еще обрабатываются / регистрируются?
РЕДАКТИРОВАТЬ : Еще одна проблема заключается в том, что я также хочу уведомить пользователя об ошибке. Иногда важно, чтобы очистка происходила быстро, и я не хочу, чтобы окно сообщения блокировало приложение на долгое время и выполняло очистку после того, как пользователь подтвердил ошибку.