Спасибо. Потихоньку начинаю использовать асинх ждать. в примере с коллбеками еще момент что нам приходится нарушать принцип инкапсуляции, делаю обработку Экспортной
Как это работает в 1С можно только гадать. Это же закрытая платформа. Скорее всего они взяли идею в JS так как в 1С асинхронные операции так же работает в одном главном цикле, т.е. когда надо вернуться и продолжить с места Ждать все остальное останавливается. В отличии н.п. от с# где все работает параллельно. Скорее всего они как и в JS заменяют ждать на функции обратного вызова (как в JS) и когда метод которого Ждут отработал, вызывается инструкция после Ждать. Где-то запоминается адрес этой инструкции чтобы можно было ее вызвать. И так же еще восстанавливает локальные переменные на стеке. А может запоминается адрес в байт-коде. н.п. После ждать идет байт-код который присваивает значение переменной слева и виртуальная машина которая выполняет байт-код 1С переходит по этому адресу. Можно почитать как это работает в JS. Наверное 1С будет больше всего на него похожа. В JS вроде метод с await делится на две подзадачи, до и после await. И вызывается подзадача после await. На реализацию sync await в с# думаю 1С не будет совсем похожа. Там настоящая параллельность. Не как в 1с или JS все в одном потоке и одном цикле событий. Но думаю, эта информация, не даст какой-то практической пользы.
Либо асинхронные функции платформы (у которых суффикс Асинх), либо свои с модификатором Асинх. Но только надо понимать, что свои функции Асинх есть смысл ждать только если они в свою очередь вызывают платформенные асинхронные функции. т.е. не получится сделать свою асинхронную функцию, на самом деле асинхронную, которая будет работать в фоне. Например в С# можно сделать так: написать функцию, которая будет работать в параллельном потоке и ждать ее, через оператор await аналог ждать в 1С. В 1С так сделать нельзя, нельзя сделать свою функцию которая будет работать в фоне и ждать ее через Ждать. Если в 1С написать свою функцию с модификатором Асинх и ждать ее, то она будет работать синхронно, не в фоне, блокируя ту функцию которая ее вызвала.
Именно. Это просто синтаксический сахар к старому механизму. Но от этого он не становится бесполезным, а наоборот. Так как работать с кодом с Асинх и Ждать на много и намного удобнее.
Спасибо! Здорово все разложил!
Спасибо, очень интересно разложили информацию.
Спасибо. Потихоньку начинаю использовать асинх ждать. в примере с коллбеками еще момент что нам приходится нарушать принцип инкапсуляции, делаю обработку Экспортной
Про инкапсуляцию - это да. Лишние публичные методы.
Спасибо!
А как 1С узнает, с какой строки продолжить исполнение? На платформе скорее всего goto используется, а как они строку определеяют?
Как это работает в 1С можно только гадать. Это же закрытая платформа. Скорее всего они взяли идею в JS так как в 1С асинхронные операции так же работает в одном главном цикле, т.е. когда надо вернуться и продолжить с места Ждать все остальное останавливается. В отличии н.п. от с# где все работает параллельно. Скорее всего они как и в JS заменяют ждать на функции обратного вызова (как в JS) и когда метод которого Ждут отработал, вызывается инструкция после Ждать. Где-то запоминается адрес этой инструкции чтобы можно было ее вызвать. И так же еще восстанавливает локальные переменные на стеке. А может запоминается адрес в байт-коде. н.п. После ждать идет байт-код который присваивает значение переменной слева и виртуальная машина которая выполняет байт-код 1С переходит по этому адресу. Можно почитать как это работает в JS. Наверное 1С будет больше всего на него похожа. В JS вроде метод с await делится на две подзадачи, до и после await. И вызывается подзадача после await. На реализацию sync await в с# думаю 1С не будет совсем похожа. Там настоящая параллельность. Не как в 1с или JS все в одном потоке и одном цикле событий. Но думаю, эта информация, не даст какой-то практической пользы.
Получается что в Ждать можно использовать только те функции у которых постфикс "асинх"? Свои функции туда пихнуть нельзя?
Либо асинхронные функции платформы (у которых суффикс Асинх), либо свои с модификатором Асинх. Но только надо понимать, что свои функции Асинх есть смысл ждать только если они в свою очередь вызывают платформенные асинхронные функции. т.е. не получится сделать свою асинхронную функцию, на самом деле асинхронную, которая будет работать в фоне. Например в С# можно сделать так: написать функцию, которая будет работать в параллельном потоке и ждать ее, через оператор await аналог ждать в 1С. В 1С так сделать нельзя, нельзя сделать свою функцию которая будет работать в фоне и ждать ее через Ждать. Если в 1С написать свою функцию с модификатором Асинх и ждать ее, то она будет работать синхронно, не в фоне, блокируя ту функцию которая ее вызвала.
@@fastAbout1s спасибо. Тогда получается это тоже самое как с описанием оповещения, только удобнее.
Именно. Это просто синтаксический сахар к старому механизму. Но от этого он не становится бесполезным, а наоборот. Так как работать с кодом с Асинх и Ждать на много и намного удобнее.
С какой версии появилось асинх ждать?
8.3.18, два года назад где-то