Один шаблон, который иногда полезен для устранения временных ошибок при операциях с повторной попыткой, - это определение интерфейса обратного вызова с ошибками и некоторых классов, которые его реализуют; когда происходит ошибка, сообщите об этом объекту обратного вызова и решите, следует ли создать исключение или повторить действие. Поскольку существующие классы связи не следуют такому шаблону, может потребоваться перехватить их исключения и превратить их в обратные вызовы.
Обратите внимание, что этот подход позволяет намного чище обрабатывать многие сценарии обработки ошибок, чем обычная обработка исключений. Помимо прочего, он упрощает настройку политик для того, сколько попыток может быть предпринято, сколько времени они могут занять и т. Д., А также предоставляет возможность пропуска будущих попыток, если получено что-то вроде запроса «отмена».