README.md

    autumn-async

    Модуль ОСени для внедрения асинхронного API для вашей библиотеки

    Использование

    Допустим у вас есть API в вашем Желуде которое хочется выполнять в отдельном потоке:

    // МойЖелудь.os
    
    Функция СкачатьЧтоНибудьИзИнтернета(ЧтоСкачать) Экспорт
    
        // Качаем большой файл
        Приостановить(5000);
    
        Возврат Результат;
    
    КонецФункции
    
    

    В таком виде пользователю прийдётся ждать пока качается очень большой файл, а он мог бы заняться в это время чем нибудь полезным, чтобы облегчить ему жизнь теперь можно просто навесить аннотацию &Асинх на метод который нужно выполнить асинхронно и пользователь получит Обещание на то что файл будет скачан и сможет его получить когда заняться будет больше нечем.

    Особенности работы с процедурами

    В свете того что процедуры ничего не возвращают, то пользователь не получит обещание о исполнении метода, он просто будет фоном выполнен, останется только подождать.
    Основная сложность при возникновении Исключений при фоновом исполнении процедур, по умолчанию библиотека представляет стандартный перехватчик который залогирует возникшую ошибку и имя метода в котором она возникла.
    При необходимости более сложной логики обработки исключений, вы можете создать Желудь в котором будет реализован определённый API

    
    // МойКлассныйПерехватчик.os
    
    Процедура ОбработатьИсключение(
            ИнформацияОбОшибке, // Информация о возникшем исключении
            ИмяМетода,          // Имя метода в котором возникло исключение
            Параметры           // Параметры метода которые были в него переданы
        ) Экспорт
    
        // Полезный код обработки исключения
    
    КонецПроцедуры
    
    &Желудь
    Процедура ПриСозданииОбъекта()
    КонецПроцедуры
    

    После чего указать этот Желудь как обработчик не перехваченных исключений в вашем асинхронном желуде:

    // АсинхронныйЖелудь.os
    
    &Желудь
    &Асинх("МойКлассныйПерехватчик")
    Процедура ПриСозданииОбъекта()
    КонецПроцедуры
    

    Так же вы можете глобально переопределить стандартный обработчик не перехваченных исключений добавив &Верховный &Желудь("СтандартныйОбработчикНеПерехваченныхАсинхронныхИсключений")

    Важно:
    В рамках этого обработчика нельзя использовать ВызватьИсключение, оно никак не будет обработано и никаких следов о исключении не останется.

    Конвейеры
    0 успешных
    0 с ошибкой