Фирма «1С» рассказала об улучшении синтаксиса языка 1С для работы с асинхронными функциями. Новая форма работы с асинхронностью будет реализована в технологической платформе «1С:Предприятие 8.3.18».
Новая асинхронность в «1С:Предприятие 8.3.18»
«В версии 8.3.18 будут внесены изменения для того, чтобы упростить работу с асинхронностью. В основе лежит идея, что разработчику проще и понятнее видеть код, состоящий из набора последовательно выполняемых операций и содержащий минимальное количество деталей, не связанных напрямую с решаемой им задачей. Сделанные изменения направлены на то, чтобы сделать код, имеющий дело с асинхронностью, максимально подобным обычному последовательному коду», – говорится в описании очередного нового релиза на страницах официального технологического блога «Заметки из Зазеркалья».
Близким аналогом новой асинхронности в «1С:Предприятие 8.3.18» является тип Promise и конструкции async/await языка JavaScript (тип Promise был добавлен в язык стандартом ECMAScript 6, а async/await – ECMAScript 2017). А одним из драйверов текущих изменений разработчики называют появление в свое время в технологической платформе веб-клиента, который потребовал поддержки асинхронной модели работы.
Таким образом, технологическая платформа 1С по мере своего развития становится все более приближенной к общепринятым отраслевым стандартам. Отчасти это происходит за счет возрастающих технологических требований, отчасти за счет вовлечения в проекты 1С все большего числа разработчиков с различной специализацией.
Как это будет работать
Сама суть асинхронности, уже реализованной в «1С:Предприятии», не меняется. Речь идет о новой форме работы с асинхронностью, в которую включены три составные части:
- тип Promise/Обещание;
- новые асинхронные функции платформы, возвращающие Обещание;
- конструкции Асинх/Async и Ждать/Await во встроенном языке.
Разработчики утверждают, что основная магия скрыта в операторе Ждать: «Новое состоит в том, что в операторе Ждать выполнение Асинх процедуры/функции может приостанавливаться и возобновляться. Приостановка означает выход из процедуры/функции с возможностью последующего продолжения. Но элемент стека вызовов, соответствующий приостановленной процедуре/функции не очищается и не удаляется. И при возобновлении выполнение начинается с той же точки, где оно было приостановлено с тем же окружением, включая значения локальных переменных, что было до приостановки».
Таким образом, выполнение оператора Ждать выглядит следующим образом:
- выполнение процедуры/функции приостанавливается;
- при первой приостановке управление будет возвращено коду, который изначально вызвал процедуру/функцию, а при последующих приостановках управление будет возвращено системному коду, вызвавшему возобновление выполнения;
- возобновление происходит, как только Обещание будет завершено, при этом оператор Ждать возвращает значение или выбрасывает исключение, в зависимости от того, что оказалось завернутым в Обещание.
Новая и старая асинхронность. Источник: wonderland.v8.1c.ru
Иными словами, оператор Ждать позволяет организовать точку приостановки/возобновления выполнения в любом месте Асинх процедуры/функции без создания объекта ОписаниеОповещения() и отдельной процедуры обработчика оповещения.
Когда это будет работать
Предполагается, что новая модель асинхронной работы появится в релизе платформы «1С:Предприятие 8.3.18». Но выход нового релиза не будет означать автоматического перехода на «новые методы работы». Очевидно, потребуется рефакторинг кода, а также добрая воля разработчиков, которые должны будут начать использовать новые возможности. Если для этого перехода не будет применяться никаких стимулирующих мер, то процесс может очень существенно растянуться во времени.