Асинхронность в 1С

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 พ.ย. 2024

ความคิดเห็น • 13

  • @Duhmen66
    @Duhmen66 8 หลายเดือนก่อน +2

    Спасибо! Здорово все разложил!

  • @НаЧиле-ъ9ш
    @НаЧиле-ъ9ш ปีที่แล้ว +1

    Спасибо, очень интересно разложили информацию.

  • @avbolshakov
    @avbolshakov ปีที่แล้ว +2

    Спасибо. Потихоньку начинаю использовать асинх ждать. в примере с коллбеками еще момент что нам приходится нарушать принцип инкапсуляции, делаю обработку Экспортной

    • @fastAbout1s
      @fastAbout1s  ปีที่แล้ว

      Про инкапсуляцию - это да. Лишние публичные методы.

  • @ЕленаНепомнящая-ъ8с
    @ЕленаНепомнящая-ъ8с 7 หลายเดือนก่อน +1

    Спасибо!

  • @mobilitymoon5232
    @mobilitymoon5232 ปีที่แล้ว

    А как 1С узнает, с какой строки продолжить исполнение? На платформе скорее всего goto используется, а как они строку определеяют?

    • @fastAbout1s
      @fastAbout1s  ปีที่แล้ว +2

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

  • @vladyan01
    @vladyan01 ปีที่แล้ว

    Получается что в Ждать можно использовать только те функции у которых постфикс "асинх"? Свои функции туда пихнуть нельзя?

    • @fastAbout1s
      @fastAbout1s  ปีที่แล้ว

      Либо асинхронные функции платформы (у которых суффикс Асинх), либо свои с модификатором Асинх. Но только надо понимать, что свои функции Асинх есть смысл ждать только если они в свою очередь вызывают платформенные асинхронные функции. т.е. не получится сделать свою асинхронную функцию, на самом деле асинхронную, которая будет работать в фоне. Например в С# можно сделать так: написать функцию, которая будет работать в параллельном потоке и ждать ее, через оператор await аналог ждать в 1С. В 1С так сделать нельзя, нельзя сделать свою функцию которая будет работать в фоне и ждать ее через Ждать. Если в 1С написать свою функцию с модификатором Асинх и ждать ее, то она будет работать синхронно, не в фоне, блокируя ту функцию которая ее вызвала.

    • @vladyan01
      @vladyan01 ปีที่แล้ว

      @@fastAbout1s спасибо. Тогда получается это тоже самое как с описанием оповещения, только удобнее.

    • @fastAbout1s
      @fastAbout1s  ปีที่แล้ว

      Именно. Это просто синтаксический сахар к старому механизму. Но от этого он не становится бесполезным, а наоборот. Так как работать с кодом с Асинх и Ждать на много и намного удобнее.

  • @figa5107
    @figa5107 ปีที่แล้ว

    С какой версии появилось асинх ждать?

    • @fastAbout1s
      @fastAbout1s  ปีที่แล้ว +1

      8.3.18, два года назад где-то