Модуль ОСени для внедрения асинхронного API для вашей библиотеки
Допустим у вас есть API в вашем Желуде
которое хочется выполнять в отдельном потоке:
// МойЖелудь.os
Функция СкачатьЧтоНибудьИзИнтернета(ЧтоСкачать) Экспорт
// Качаем большой файл
Приостановить(5000);
Возврат Результат;
КонецФункции
В таком виде пользователю прийдётся ждать пока качается очень большой файл, а он мог бы заняться в это время чем нибудь полезным, чтобы облегчить ему жизнь теперь можно просто навесить аннотацию &Асинх
на метод который нужно выполнить асинхронно и пользователь получит Обещание на то что файл будет скачан и сможет его получить когда заняться будет больше нечем.
В свете того что процедуры ничего не возвращают, то пользователь не получит обещание о исполнении метода, он просто будет фоном выполнен, останется только подождать.
Основная сложность при возникновении Исключений при фоновом исполнении процедур, по умолчанию библиотека представляет стандартный перехватчик который залогирует возникшую ошибку и имя метода в котором она возникла.
При необходимости более сложной логики обработки исключений, вы можете создать Желудь
в котором будет реализован определённый API
// МойКлассныйПерехватчик.os
Процедура ОбработатьИсключение(
ИнформацияОбОшибке, // Информация о возникшем исключении
ИмяМетода, // Имя метода в котором возникло исключение
Параметры // Параметры метода которые были в него переданы
) Экспорт
// Полезный код обработки исключения
КонецПроцедуры
&Желудь
Процедура ПриСозданииОбъекта()
КонецПроцедуры
После чего указать этот Желудь
как обработчик не перехваченных исключений в вашем асинхронном желуде:
// АсинхронныйЖелудь.os
&Желудь
&Асинх("МойКлассныйПерехватчик")
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Так же вы можете глобально переопределить стандартный обработчик не перехваченных исключений добавив &Верховный
&Желудь("СтандартныйОбработчикНеПерехваченныхАсинхронныхИсключений")
Важно:
В рамках этого обработчика нельзя использовать ВызватьИсключение, оно никак не будет обработано и никаких следов о исключении не останется.