Синхронная асинхронность в «1С:Предприятие 8.3.18»

22.04.2020      210621

Фирма «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». Но выход нового релиза не будет означать автоматического перехода на «новые методы работы». Очевидно, потребуется рефакторинг кода, а также добрая воля разработчиков, которые должны будут начать использовать новые возможности. Если для этого перехода не будет применяться никаких стимулирующих мер, то процесс может очень существенно растянуться во времени.

Подробнее о новой форме работы с асинхронным кодом в платформе «1С:Предприятие 8.3.18» в технологическом блоге «Заметки из Зазеркалья»


Автор:
Обозреватель


Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. TreeDogNight 22 22.04.20 14:35 Сейчас в теме
Отличная новость! Теперь осталось дождаться появления асинхронной синхронности и будет всем счастье :)
o.nikolaev; +1 Ответить
23. Darklight 32 23.04.20 14:44 Сейчас в теме
(1)Так ведь именно асинхронную синхронность компания 1С и предложила в 18-релизе! Никакой параллельности в ней нет! Чистая квази-асинхронность!
unduty; TreeDogNight; +2 Ответить
2. user623969_dusa 22.04.20 15:00 Сейчас в теме
что теперь движок 1с пишут на яваскрипте - фишка с асинх функциями оттудова)
3. bobank 200 22.04.20 15:39 Сейчас в теме
(2) а веб клиент по твоему как должен работать. канешна оттудова.
4. VmvLer 22.04.20 16:27 Сейчас в теме
только привыкли в оповещениям и тут ветер переменился

этого никогда не было в реале...
отдел перспективных разработок возглавил жаваспритолог и тут же заявил

- Так, шо у вас за муть с оповещениями!?
- По просьбе трудящихся наваяли ассинхронный функционал.
- Шо, а где Promise и Await?
- Так это же те же яйца?!
- Чепуха - пусть будет вид сбоку, снизу и любом ракурсе одной и то же шняги.
- Зачем этот зоопарк?!
- Нубы должны страдать!
ikalmykia; mevgenym; asg.aleks; magdeevik; Yashazz; HystriX; Brawler; shard; suepifanov; TreeDogNight; +10 Ответить
7. akpaevj 202 22.04.20 18:57 Сейчас в теме
(4) Это дополнение к callback'ам, в статье не говорится о запрете использования старого механизма. Async/await - сахар, который существенно сокращает объем вызова асинхронного кода, но так-же имеющий свои недостатки в необходимости модификации всей цепочки вызовов как async/await. Пока непонятно как будет организована работа event'ов (возможно ли будет применение модификаторов к ним) и что с менеджерами task'ов. В целом, многие языки перенимают эти конструкции, в C# это прижилось как родное. Именно из-за необходимости модификации цепочек и переписки кода вызовов, перевод кодовой базы существующих решений займет, вероятно, очень длительное время.
Drivingblind; orfos; 1v7; +3 Ответить
25. Darklight 32 23.04.20 14:54 Сейчас в теме
(7)Ну, например, в ожидаемой платформе MS .NET 5 от колбэк-функций полностью отказались в дизайне API - перейдя на модель async/await
Что мешает 1С сделать так в будущем - и если даже не уберут текущие функции "Начать...()" то все новые могут быть уже только "Асинх функция ....Асинх()"
Проблема в том, что в .NET и Java - нет проблем с многопоточностью и созданием собственных асинхронных функций, не основанных (тупо полусинхронно оборачивающих) на встроенных асинхронных функций.
А, вот, в JavaScript такая проблема - есть - там нет гибкой многопоточности - хоть и обходными путями её можно получить (чуть легче чем в 1С через фоновые задания на сервере) - но на клиенте (а в 1С на клиенте этого никак не получить даже обходными путями)! От чего польза от этих промисов в 1С крайне сомнительная! Хотя да - в ряде случаев чисто синтаксически они очень даже помогают писать программный код, вынуждено нуждающийся в применении встроенных асинхронных функций - но не более чем! То есть - по-прежнему пляшем от нужды - а не от эффективности, красоты и удобства!
28. akpaevj 202 23.04.20 15:24 Сейчас в теме
(25) Как я и сказал, показанные сниппеты довольно скудны. Вообще, я не пойму в чем Ваше негодование то?:) По-моему, это исключительно положительное веяние, но все зависит от того, как механизм task`ов будет реализован в платформе.
TreeDogNight; +1 Ответить
31. Darklight 32 23.04.20 16:55 Сейчас в теме
(28)Вянье положительное - я этого не отрицал. Просто опять предлагают "шило вместо мыла"! Одна сплошная "иллюзия обмана"!
52. Yashazz 4722 10.11.20 20:03 Сейчас в теме
(4) Когда я им N лет назад высказал, что все эти их оповещения - костыльная кромешная жуть, они обижались и твердили, что так-де и надо, а "эти ваши js-замашки идут лесом". И десяти лет не прошло.
5. leemuar 22.04.20 17:15 Сейчас в теме
Кажется *EvilBeaver напьется. Если уже не :)
6. Evil Beaver 8114 22.04.20 17:33 Сейчас в теме
(5) почему ты так решил?
8. leemuar 22.04.20 22:03 Сейчас в теме
(6) помню в какой-то ветке ты предлагал свою помошь разработчикам, чтобы сделать "нормальную" асинхронность, ругал оповещения. Подумал тебе понравится эта новость :)
12. Evil Beaver 8114 23.04.20 09:37 Сейчас в теме
(8) нет, они сделали всё через одно место обсуждалось в Телеграме. Я грущу
Darklight; +1 Ответить
9. Brawler 455 23.04.20 00:09 Сейчас в теме
Конечно эта новость интересна, но до 8.3.18 типовым конфигурациям еще как до луны и обратно.
Потом я лично ожидаю, что убогость по работе с торговым оборудованием перепишут под новый механизм, так как то что сейчас есть с оповещениями, это лютая жесть, которую отладить порой невозможно во вменяемые сроки чтобы найти причину ошибок оборудования...
distorshion; starik-2005; TreeDogNight; +3 Ответить
10. mr_best_23rus 30 23.04.20 04:13 Сейчас в теме
Ура! Дошло до до жёлтых, не прошло и пол века. Ещё бы нармальное ооп сделали бы. Хотя, ещё пол века не прошло...
13. Evil Beaver 8114 23.04.20 09:38 Сейчас в теме
(10) есть мнение, что людям, которые не умеют писать слова без ошибок, и нормальное ООП ни к чему... Все равно, что зайцу - микроскоп.
user1118428; Yashazz; TreeDogNight; HystriX; mpeg1989; o4karek; +6 Ответить
36. mr_best_23rus 30 24.04.20 03:30 Сейчас в теме
(13) Нармально все, ты сам папробуй ООП, мозет панравитса!
27. Darklight 32 23.04.20 15:14 Сейчас в теме
(10)Рано радуетесь - тут всё, как всегда, через ж...
11. vipetrov2 23.04.20 07:28 Сейчас в теме
Компания 1С ерундой занимается. По сути эти нововведения добавляют работы разработчикам конфигураций, а за все эти бесполезные манипуляции будут платить клиенты. Т.е. 1С придумала сама себе бесполезную работу и содрала за это деньги с клиентов.

После вызова НачатьКопированиеФайла() интерфейс заблокируется и смысла нет в этих асинхронных вызовах. Если бы интерфейс хотя бы был друхпоточный, т.е. использующий шаблон программирования Model-View, то было бы все хорошо, но в 1С на стороне клиента этого нет. И все эти функции Начать... и прочие только вред приносят, потому что вынуждают делать переработку кода конфигурации и делают его более сложным к прочтению.
14. Evil Beaver 8114 23.04.20 09:42 Сейчас в теме
(11) сижу и думаю, прокомментировать этот бред или не стоит... model-view, потоки, интерфейс заблокируется...ну и каша в голове у людей...
d4rkmesa; 1v7; Isakov_Artem; HystriX; +4 Ответить
17. Darklight 32 23.04.20 12:57 Сейчас в теме
(14)Не - ну про блокировку интерфейса там здравые слова - вся эта асинхронность - пока очень бестолковая!
Смотрел финальный пример из зазеркалья (причём очень дурацкий и кривой пример) - там на клиенте стартовой функцией (вернее процедурой) является КопироватьФайлы(Команда) - судя по всему - некая команда обработчика нажатия кнопки (допустим это). Так вот, лично мне не понятно - будет ли эта команда обрабатываться с блокировкой всего интерфейса (или он будет блокироваться урывками). В старой модели "асинхронности" на каллбэк-функциях - можно было написать без блокировки (с кучей "НО").

С другой стороны - допустим мне нужно ассинхронно (оставив интерфейс незаблокированным только в этой части) выполнить только часть кода внутри команды - как мне тогда поступить?
19. TreeDogNight 22 23.04.20 13:39 Сейчас в теме
(17) Выводить эту часть кода в отдельную асинхронную процедуру. При этом процедура-обработчик команды асинхронной не будет.
21. Darklight 32 23.04.20 13:50 Сейчас в теме
(19)Не понимаю. Вот мне нужно сначала синхронно что-то изменить на форме - затем выполнить какую-то асинхронную операцию - не блокируя форму - а затем снова что-то сделать на форме, блокируя её до завершения операции Как?

Если команда, вызывающая асинхронный обработчик не будет блокировать форму на этот вызов - то и внутри я не смогу её заблокировать (разве что друступность = Ложь выставить - но это, как Вы, понимаете, немного другое - ведь речь о всём клиентском контексте).
Если команда вызывает асинхронный обработчик блокируя контекст формы - то тут он так и останется до конца выполнения заблокированным.
Если же вызывать не асинхронный обработчик - то в нём я уже не смогу ждать завершение асинхронной части - чтобы довыполнить не асинхронную Не - ну можно - кеонечно через подлкючение обработчиков ожидания выкрутиться - то это именно ВЫКРУТИТЬСЯ для определённого случая!

В классической модели асинхронности клиентского контекста 1С - асинхронная часть выполнялась асинхронно именно в момент вызова асинхронной функции - и далее завершение уже обрабатывалось как обработка события завершения асинхронности! Но самому создавать такие асинхронные функции было НЕЛЬЗЯ!
29. akpaevj 202 23.04.20 15:37 Сейчас в теме
(21) Опять же, все зависит от реализации механизма в платформе. Вообще, описанная Вами ситуация решается обычно довольно просто:
1. Меняешь значение на форме.
2. Запускается обработчик события с неблокирующим UI вызовом async куска кода.
3. После выполнения асинхронного кода управление возвращается в UI поток.
Это если не баловаться с вызовами, типа ".ConfigureAwait(false)", наличие которых, опять же, зависит от реализации механизма в платформе и насколько глубоко дадут управлять выполнением задач.
30. Darklight 32 23.04.20 16:53 Сейчас в теме
(29)Это я просто пример пытался привести сходу. Возможно он слишком уж натянутый. Просто нет времени сейчас придумывать более реалистичный пример. Так как из-за в привитом уже, 1С, синхронном мышлении - сходу и не сообразишь на тему хорошего асинхронного примера. Чаще всего мне требовали задачи какого-то фонового обновления формы, фонового контроля, и фонового-клиент серверного взаимодействия - когда запросы коротки и городить фоновоые задания просто не целесообразно (или это взаимодействие их никак не может иметь - например это вызов web-сервиса) - или нужно обработать результат их выполнения - не блокируя клиентского контекста (например формируя их на клиенте до фактического востребования пользователем).

Кстати:
1. Это что - синхронный (классический) обработчик команды GUI?
2. Тогда как из синхронного обработчика запустить асинхронный, который Асинх? Ну - вернее запустить то можно - остаётся только вопрос в получении результата его работы и продолжения синхронного выполнения после завершения асинхронной части. Ну - конечно полученное "Обещание" можно сохранить в клиентскую переменную - но всё-равно - нужно какое-то событие - чтобы обработать ожидание её завершения (причём само ожидание должно быть асинхронным, а обработка - уже должна блокировать основной поток выполнения).
3.
После выполнения асинхронного кода управление возвращается UI поток
- вот это мне вообще не понятно. Ведь задача стояла так - чтобы асинхронное выполнение как раз не блокировало GUI пока оно выполняется! А потом был выполнен синхронный код. И формально - на старом подходе через колбэк-функции я ограничено могу это реализовать!
35. akpaevj 202 23.04.20 23:38 Сейчас в теме
(30) Я имел ввиду при запуске из async обработчика команды. Но даже без этого можно корректно отработать Ваш сценарий (при условии наличия необходимого API), что-то вроде:
1. Запускается sync обработчик нажатия кнопки.
2. В нем запускается async метод без ожидания окончания.
3. В конце async метода вызывается метод обновления UI с переключением контекста на UI поток (допустим ThreadHelper.RunOnUI(...));
В общем, это гадание на кофейной гуще. Когда будет документация на механизм, тогда и все вопросы отпадут.
37. Darklight 32 24.04.20 13:02 Сейчас в теме
(35)
"ThreadHelper.RunOnUI(....)" такого в 1С не будет никогда! значит пункт 3. не выполним. Но... подумав над все этим я могу утверждать - что всё что я написал - всё так и будет работать на самом деле (за исключением одного "НО" - недостижимого желания) - всё дело в магии модели асинхронности асинх\ждать - вернее в её почти полном отсутствии!
1. Исходный обработчик команды должен быть Асинх(ронным) - но это по сути ничего не меняет - ведь он останется при его старте почти 100% произойдёт классическая блокировка клиентского контекста выполнения (потока GUI) что, собственно, и требовалось по задаче
2. Далее в этом методе (или любом вызываемом - но тоже асинхронном) запускается асинхронная операция. Вот тут и кроется НО! Во-первых, что мы будем подразумевать под асинхронной операцией? И вообще как они работают? Ответы на вопросы ниже. А пока просто будем считать асинхронной операцией у нас будет вызов функции "ВввестиДатуАсинх()" (мог выбрать и "НайтиФайлыАсинх" - это не принципиально: работу проверял на их асинхронных текущих аналогах "ПоказатьВвводДаты" и "НачатьПоискФайлов"). Вот тут и заключается Вся магия асинхронных функций - на экране появится диалог ввода даты - "в отдельной" форме. Или не совсем форме? Вот тут и подвох - поток GUI обоих "форм" (исходной и ввода даты, открытый "ПоказатьВвводДаты") - один и тот же - и если после открытия этой, якобы асинхронной операции, будет продолжаться выполнение в исходном методе - то эта асинхронная операция будет полностью заблокирована - пока этот код не выполнится (и не спасает даже никакая эмуляция сна). На самом деле с "НачатьПоискФайлов" всё то же самое - сам поиск файлов не начинается пока не завершится код в исходной операции - а пока идёт поиск файлов - форма остаётся заблокированной! То есть вся эта асинхронность - полнейший МИФ! Но да ладно. Суть не в этом. А в том, что ранее продолжение выполнения (после завершения асинхронной операции) нужно было писать в обработчике завершения - и он блокировал бы контекст формы. То сейчас нужно написать вот так "Ждать ВввестиДатуАсинх()" и размещать код продолжения сразу за асинхронной операцией! И он будет выполнен по её завершению - это и есть пункт 3.
Никакой асинхронности нет!
Уверен - что на этой строке "Ждать НайтиФайлыАсинх()" формат так же останется заблокированной - значит всё по-прежнему будет в один поток - строго синхронно! ВСЯ ЭТА АСИНХРОННОСТЬ - ЭТО ПРОСТО МИФ!
Именно об этом я написал ниже в посте (34).

Нет в ней никакого смысла. Как и нет смысла в функциях "НачатьПоискФайлов" или "НайтиФайлыАсинх". Они нужны только ПО ПРИНУЖДЕНИЮ в WEB-Клиенте. Они такие же синхронные - только применение колбэк-функций типа "НачатьПоискФайлов" сильно усложнило программирование алгоритмов с их применением.
Но если подумать, что реально зачем в 1С вся эта новая модель асинх/ждать если всё с ней остаётся синхронным - нужно было просто доработать исходные синхронные методы как НайтиФайлы() просто сделав их внутри асинхронными с ожиданием - для случая использования в WEb-клиенте (только):

Функция НайтиФайлы(параметры...) экспорт
#ЕСЛИ не WebКлиент ТОГДА
     возврат НайтиФайлыСинх(параметры...) ;
#ИНАЧЕ
         Обещание = НайтиФайлыАсинх();
         возврат ПодождатьНайтиФайлыАсинх(Обещание);
#КОНЕЦЕСЛИ
КонецФункции


Асинх фунукция ПодождатьНайтиФайлыАсинх(Обещание)
     Пока Обещание.Состояние = СостояниеОбещания.Выполняется Цикл
           КакоетоОжидание();
     КонецЦикла;
     возврат Ждать Обещание; //Получение результата - конечно на нормальном фреймворке это всё выглядело бы куда красивее
КонецФунукции
Показать


Формально мы превратили асинхронную функцию - в синхронную с ожиданием!
Возможно при трансляции в JavaScript такую обёртку не удастся сделать (чтобы отказаться от ключевого слова асинх) - но тогда можно просто все функции помечать так (при трансляции) и написать вот так

Асинх Функция НайтиФайлы(параметры...) экспорт
#ЕСЛИ не WebКлиент ТОГДА
     возврат НайтиФайлыСинх(параметры...) ;
#ИНАЧЕ
       возврат Ждать НайтиФайлыАсинх();
#КОНЕЦЕСЛИ
КонецФункции //Загвоздка тут видимо в том, что такая функция вернёт Обещание - и к нему всё равно придётся применить операцию "Ждать" - чтобы получить результат!
Показать


Правда аргументы все будут передаваться только по значению - а не как принято в 1С по ссылке (что - правда ужасно - лучше всегда по значению).

В общем - вся эта архитектура асинх/жать нужна только для WEB-Клиента чтобы не писать монструозные конструкции на колбэк-функция, а писать в классическом синхронном стиле - ведь по сути всё так и остаётся синхротронным - никакой асинхронности тут нет и в помине!


Справедливости ради, надо заметить - что обычным (не ВЭБ) клиентам это тоже может быть полезно - т.к. позволяет эмулировать модальную работу с формами без колбэк-функций - т.е. можно написать так
МояДата = '00010101';
Если Ждать ВввестиДатуАсинх(МояДата) Тогда //тут может быть асинхронное открытие любой формы
 //И тут продолжить обработку введёной даты
КонецЕсли;


Это, безусловно удобно - хотя не так критично как работа с рядом асинхронных функций как "НачатьПолучениеКаталогаВременныхФайлов()" когда под WEB-Клиентом невозможно использовать синхронный аналог!
Irbiz; user1118428; Roootru; +3 Ответить
32. Darklight 32 23.04.20 17:00 Сейчас в теме
(19)В примере - обработчик команды - асинхронная функция.
А вот если обработчик команды будет не асинхронным - то я конечно смогу вызвать в нём асинхронную функцию - условно асинхронно и смогу получить "Обещание", вот только (В текущей реализации) не смогу в этом синхронном обработчике запустить отложенное синхронное выполнение результата! Да и асинхронное тоже не смогут!
Смотри мой пост (22)
TreeDogNight; +1 Ответить
15. ImHunter 315 23.04.20 10:00 Сейчас в теме
Вот блин, сделали бы ОписаниеОповещения, рождаемое и на сервере. Можно было бы немного ФП привнести в код при желании.
unduty; Darklight; +2 Ответить
16. 1v7 235 23.04.20 10:41 Сейчас в теме
Что говорить про хорошо/плохо реализовано... Осталось дождаться 8.3.18 и проверить. У Beta-тестов уже есть такая возможность. Код асинхронизации на 1с кому интересно
18. starik-2005 3036 23.04.20 13:32 Сейчас в теме
Вот читают походу 1С-неги инфостарт, где им про промисы только совсем уж ветхтий адинесник не намекал )))
20. starik-2005 3036 23.04.20 13:44 Сейчас в теме
В общем походу суть промисов так и не дошла до желтых, а суть в том, что на выходе тоже промис, который позволяет произвести конвейеризацию, а сам промис определен функциями для успешного и безуспешного завершения кода. По сцылке в 1С предлагают городить огород с ожиданием внутри блока попытка-исключение, что вообще с моей лично точки зрения какой-то бред, почти полностью нивелирующий выгоду от асинхронного исполнения кода, т.к. он тупо становится синхронным.

Хотя я не прав, ибо Ждать можно юзать только внутри асинхронных функций. Но все-равно что-то тут не так, ибо теперь нет колбэка ни для успешного, ни для безуспешного завершения операции (а он даже в старом механизме был), по крайней мере я не увидел.
HystriX; user1311038; +2 Ответить
22. Darklight 32 23.04.20 14:27 Сейчас в теме
Конечно - появление такой асинхронной модели - это шаг в перёд - хоть и скопировано всё с Java - не лучшее что есть в методологии синхронизации - да и не шаг - а пол шага вперёд - т.к. добавили настолько мизерную часть - что реального толка от неё не больше - чем от того что уже было в клиенте 1С.

Во-первых, русский термин - "Обещание" - звучит ужасно. Не буду разбираться в истоках становиления этого термина в Java. Но, вот, в C# аналог - Task - звучит по-русски куда лучше - "Задание" - да и есть уже в 1С похожая модель асинхронности - называется "ФоновоеЗадание" - зачем же вообще нужно было изобретать новую терминологию о совершенно той же модели использования. Ввели бы тогда "АсинхронноеЗадание" - когда асинхронность не требует открытия нового фонового сеанса на сервере. И всю модель использования (API) можно было бы сохранить (тем более она как раз очень похожа была на Task из C# - ну по-крайней мере в старой редакции .NET 4).

Ну а слова "Асинх" "Ждать" - если уж так хотелось ввести - то пожалуйста - но, на мой взгляд - это не более чем синтиаксический сахар. Причём Асинх - я бы уж точно делал бы аннотацией "&Асинх" (или даже полностью "&Асинхронно") - ибо такая запись "Асинх функция КопироватьФайлАсинх" выглядит уж очень криво.

А если честно - я в этой аннотации вообще не вижу большого смысла - я был не выделял функцию как асинхронную при её описании НИКАК! Если она вызывается как синхронная - то и выполняется как синхронная. Если вызывается с пометкой "Ждать" или "Асинх" - тогда вызывается как асинхронная. Ну для обработчиков тогда да - нужно будет помечать - как они должны вызывать такие функции.
Зачем плодить кучу одинаковых по функционалу функций и засорять ими API!

Один из самых главных недостатков подхода асинх/ждать - это то, что все функции, которые хотят использовать "Ждать" - должны быть "Асинх" - соответственно - это очень сильно накладывает ограничения на исходный код - в котором это всё выполняется. Так как вызывать такие функции становится очень затруднительно в текущем контексте (который не "Асинх"). От того, часто (в других языках) такие программы начинают проектироваться в асинхронном режиме прямо с первых фунций (с функции Main) - иначе в ней не вызывать другие асинхронные функции. Помощь тут - только интерфейсные события - которые тоже могут являться корнем для такой асинхроннгости - и, соответственно, какие-то могут быть асинхронными, какие-то могут не быть - но если какое-то событие не асинхронное изначально - об асинхронности внутри оно уже может забыть!
В отличии, скажем, от модели "колбэк-функций", применяемой в 1С ранее - где вызывать асинхронную функцию с оповещением (колбэк-функцией) можно было в любом месте контекста (правда только клиентского), главное, чтобы сама колбэк-функция была доступна по месту вызова!

В других языках (в частности в C#) это решается путём замены ключевого слова "Await" (Ждать) на просто объектную модель работы с асинхронными заданиями - так же как это реализовано в 1С у фоновых заданий - запустили задание - получили его описание и всё-никаких ограничений на исходный вызывающий код нет - нужно дождаться - ну вызываем ФоновоеЗадание.ОжидатьЗавершенияВыполнения() "MyTask.Wait()" - в любом месте, где захотим - вот там и ждём.

Отличие модели асинх/ждать в том - что сама по себе - это не асинхронность - это только особый подход к её обработке - где компилятор выстраивает
специальную машину обработки состояний - позволяющую гибко ПОСЛЕДОВАТЕЛЬНО выполнять в ней код, который изначально может быть очень разрозненно написан (в удобной для программиста форме). Здесь нет никакой магии действительно асинхронного - т.е. параллельного выполнения кода (но есть управление другими функциями - которые могут выполняться параллельно - но этим программист не управляет и не создаёт их).
Именно для этого функции помечаются как "Async" - чтобы по ним выстраивалась эта машина - перестраивая их код в другую структуру выполнения. Уж не знаю - делает ли это 1С в 18-ом релизе!

И вот, мы подошли к ещё трём главным недостаткам текущей реализации в 1С (ранее был первый - что все функции, использующие "Ждать" должны быть помечены как "Асинх" - а это накладывает особые условия на контекст применения такой модели, а в других языках это обходится заменой ключевого слова "Ждать" на объектную модель как у фоновых заданий):

1. Добавление ключевого слова "Асинх" - НЕ ДЕЛАЕТ ФУНКЦИЮ АСИНХРОННОЙ - В СМЫСЛЕ ПАРАЛЛЕЛЬНО ВЫПОЛНЯЮЩЕЙСЯ! По сути - она остаётся условно синхронной - т.к. все её части выполняются в том же потоке выполнения, что вызывающий её код! (хотя, возможно, команды формы - вызывающие асинхронные обработчики в 1С не будут блокировать основной поток выполнения формы). То есть, сделать свои параллельно выполняемые функции ПО-ПРЕЖНЕМУ – НЕЛЬЗЯ! В других языках это работает так же! НО! Там есть дополнительные средства – позволяющие начать асинхронное именно ПАРАЛЛЕЛЬНОЕ выполнение вообще произвольной части кода – используются подход, запускающий функции высшего порядка в отдельном потоке – с получением Promise/Task – и дальше работа с ним уже в модели асинх/ждать – именно в этом и раскрывается вся мощь данной модели! А в 1С , как я понял, это пока не ожидается :-( А ещё в других языках так вообще можно запустить произвольный код – просто налету (по месту его выполнения) описать его как анонимную функцию – что очень положительно сказывается на красоте, простоте и понятности всего асинхронного контекста выполнения – весь асинхронный и параллельный код описать в одном месте как один контекст выполнения, не разбивая его по куче функций, сохраняя лёгкость читаемости его логики выполнения!

2. Применение ключевого слова “Ждать” зачастую очень ущербно – т.к. тут нет возможности указать таймаут этого ожидания. То есть так ждать будем пока вызванная функция не вернёт управление. А зачастую – это очень плохой дизайн. В отличии от уже упомянутого сравнения с фоновыми заданиями - где у функции «ОжидатьЗавершенияВыполнения(Таймаут)» есть «Таймаут» ожидания. И возвращая она не результат, а «ФоновоеЗадание» - из которого результат можно извлечь в любой удобный момент и месте (а не обязательно прямо тут, где вызывали и/или ждали). Более того, часто бывает нужно ждать сразу несколько асинхронных операций (либо всех сразу, либо любую из них) – тут у менеджера фоновых заданий тоже есть такая функция - это очень удобно – гораздо удобнее чем применение слова «Ждать».

3. Насколько я понял – данная асинхронная модель, по-прежнему, доступна только на клиенте (причём, как выше показано, без обеспечения реальной параллельности, и обработки таймаутов). На сервере – её по-прежнему НЕТ! И там так и придётся создавать фоновые задания – чтобы сделать хоть какую-то параллельность! Так же нет и возможности делать серверные вызовы асинхронно! Ну а про асинхронные вызовы http/web-сервисов видимо ещё тоже долго придётся мечтать! А ведь именно такие клиентские вызовы чаще всего бывают асинхронными на других платформах и языках! Но факт остаётся фактом – таких асинхронных методов платформа 1С не предоставляет. Самим такие не сделать!

Тут, правда, надо сделать несколько замечаний:
1. Вся эта асинхронность пошла исключительно с подачи некоторых браузеров – которые её потребовали в своём API – если бы ни это – компания 1С бы с высока бы плевала на все эти потребности в асинхронности на клиентах

2. В Web-Клиенте весь код 1С преобразуется в JavaScript – и вот тут есть загвоздка – JavaScript не поддерживает параллельные потоки – т.к. в нём есть такая же ущербная асинхронность, какую нам навязывает 1С. Тем самым внося кучу ограничений и в обычные клиенты! Один WEB-Клиент (по сути не особо то уже и нужный) – тормозит развитие всех других (из-за совместимости – которой, к слову, всё равно особо то и нет; впрочем, смотри замечание 1 – так что Web-Клиент тут не причём)

3. Вообще-то параллельность в JavaScript ушлые программисты давно уже научились получать обходным путём – пусть он не самый простой – но он есть – как и есть куча фреймворков, упрощающие применение этой параллельности в Web-формах (но смотри замечание 1 – компании1С просто нет до этого никакого дела)

Так что, лично моё мнение, всё это применение модели «асинх/ждать» в клиентском контексте, вместо модели «колбэк-функции» – полная ерунда! По сути, не привносящее ничего действительно полезного! Ну разве что, делающая применение таких вызовов (где этого требует WEB-Клиент) более удобным и красивым чисто синтаксически. Ну а отсутствие применимости такого похода в серверном контексте – сильно снижает его применимость вообще – когда хочется написать универсальный код, который смог бы работать, в любом контексте, и не можешь этого сделать – из-за таких, вот, ограничений в использовании некоторых подходов в разных контекстах! Из-за ЧИСТО ФОРМАЛЬНЫХ ОГРАНИЧЕНИЙ!

В общем – как всегда – лозунг 1С – «оставь надежды всяк её изучающий и применяющий»!
Capitullo; user1118428; potoyalo; IllayDevel; Brawler; +5 1 Ответить
24. starik-2005 3036 23.04.20 14:54 Сейчас в теме
(22)
В общем – как всегда – лозунг 1С – «оставь надежды всяк её изучающий и применяющий»!
Многобукв )))

Вообще, 1С-негам нужны, походу, кейсы для применения этого механизма. Вот с копированием файла с помощью асинхронной функции они какие-то проблемы решают, но ведь файл-то зачем-то копируется, а не просто "мне так захотелось". Скопировали - обработали. Если бы мне, например, нужно было бы просто скопировать файл, то 1С я бы для этого юзать не стал - достаточно проводника (хотя я чаще пользуюсь "cp", а еще чаще вообще "ln" или даже "mv").

Для веба асинхронность часто используется функциями рендеринга DOM'а, загрузки тяжелого или дополнительного догружаемого контента, когда пользователь уже может начать работать с формой, а она асинхронно продолжает загружаться (появилась кнопка "почты" в яндексе, картинки еще не догрузились, а я уже в почте, уже первое письмо читаю, правда бесит, когда нажимаю на письмо, а в это время реклама вместо него как раз догрузиласьт и я попадаю не в письмо, а в рекламный блок - убил бы тех дебилов, которые так сделали!!!)
TreeDogNight; +1 Ответить
26. Darklight 32 23.04.20 14:59 Сейчас в теме
(24)
Многобукв )))

Зато всё по существу изложил! Хоть и далеко не всё, что хотел сказать! И букв здесь меньше - чем в оригинальной статье на зазеркалье. Причём один вступительный абзац (где я обсуждал именно пример из зазеркалья) я вообще умудрился потерять!

Всё остальное - что Вы выше написали - я вообще могу понять - что Вы этим хотели донести!
33. HystriX 23.04.20 18:03 Сейчас в теме
(26) Столько текста, а согласиться можно лишь с корявостью обрезанного слова "Асинх" и с необходимостью приписывать это слово перед любыми методами, вызывающими асинхронные методы. Могли бы сделать добавление в конец рядом с "Экспорт, а не в начало. Представляю, как придется переписывать любые парсеры кода.

По поводу остальных претензий - зачем в очередной раз говорить "какое говно, почему нет серверной произвольной асинхронности и параллельности"? Оповещения появились только из-за того, что браузеры перестали поддерживать обычные блокирующие методы. Больше никакой цели у них не было. И это на самом деле удобный инструмент, когда научишься им пользоваться. Да, поначалу выносит мозг, но затем можно делать великолепные вещи, передавая в какие-то общие методы произвольные ссылки на процедуры, которые нужно в разных формах вызывать после выполнения этих общих методов.

То, о чем ведете речь вы, многопоточность, фоновые задания, веб-сервисы, не имеет никакого отношения к клиентским асинхронным вызовам. Весь смысл изменения - упростить написание таких вызовов для разработчиков. Но даже эта тема достаточно сомнительна, опять можно быть тупорезом и лепить код последовательно вместо того, чтобы думать, что и как делаешь.
34. Darklight 32 23.04.20 19:15 Сейчас в теме
(33) Я вот ни слово не сказал что методология асинх/ждать - плоха и неудобна! Напротив - она прекрасна - когда она прекрасно реализована как в той же Java или C# - а то что предлагает 1С это очередная обёртка костыля в красивую но заплесневелую ленточку!

Ибо я не вижу особого смысла в такой асинхронности как предлагает сейчас 1С - ибо это лишь квази-асинхронность - без реальной функициональной пользы (почти для всех, исключения всегда найдут себя).
Найти прямое применение даже классической асинхронности на колбэк-функциях в 1С я так до сих пор не смог. Смысл в ней только в принудительной необходимости применять данный подход, для кода клиента, который должен выполняться в браузере (ну или когда использование синхронных выключено принудительно в свойствах конфигурации - а такого я ещё не встречал - разве что в самописках - где это свойство по умолчанию просто завывают переключить, ну или вся конфигурация разрабатывается с большим устремлением для применения на WEb-клиенте).

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

Ну и вот такая реализация модели асинхронности будет только запутывать неокрепшие умы программистов - давая иллюзию что у них теперь код более эффективный параллельный асинхронный - а это совсем не так - как был он последовательно выполняемым так и остался - с блокировкой контекста выполнения - а-ля - клиентского GUI
ИЛЛЮЗИЯ ОБМАНА - да и только!

То, о чем ведете речь вы, многопоточность, фоновые задания, веб-сервисы, не имеет никакого отношения к клиентским асинхронным вызовам. Весь смысл изменения - упростить написание таких вызовов для разработчиков. Но даже эта тема достаточно сомнительна, опять можно быть тупорезом и лепить код последовательно вместо того, чтобы думать, что и как делаешь.

И именно это я подчеркнул - чтобы читающим было это понятно - что всё это лишь ОБМАН! И нужно только для упрощения кодирования под WEB-клиент (и ТОЛЬКО ПОД WEB-Клиент) - без повышения эффективности самого кода - больше тут пользы нет! Один синтаксический сахар и никаких технологических плюшек!

а согласиться можно лишь с корявостью обрезанного слова "Асинх" и с необходимостью приписывать это слово перед любыми методами, вызывающими асинхронные методы. Могли бы сделать добавление в конец рядом с "Экспорт, а не в начало. Представляю, как придется переписывать любые парсеры кода.

Там всё коряво гназвано! И об этом я написал!
Нужно было анотацию "&Асинхронно" делать. И размещать рядом с кажем с анотацией "&НаКлиенте". Было бы всё красиво и логично. И парсеры текста нормально бы обрабатывали это.
А от ключевого слова "Экспорт" я вообще бы отказался. Перевёл бы тоже на анотацию "&Экспорт" а лучше на инвертированную "&Приватно" - когда наоборот нужно скрыть публичный доступ к функции.
А если бы ещё появилась анотация "&ПовторноеИспользование" (я бы назвал "&Кеширование") и так можно было бы анотировать любые функции, а не только в управляемых формах - вот это был бы прогресс лаконичности написания функций!
Capitullo; user1118428; portwein; TreeDogNight; +4 1 Ответить
38. I_G_O_R 69 26.04.20 16:21 Сейчас в теме
(34)
она прекрасно реализована как в той же Java

ссылочку не дадите?

И вы не понимаете что такое асинхронность, постоянно примешиваете туда многопоточность. Вот где здесь поток?:
Ответ = ждать Вопрос(...)

при этом интерфейс не заблокирован и другие открытые формы могут, например, выполнять свои обработчики ожидания.
Файловые операции действительно раньше блокировали основной поток, но ситуация сдвигается, какие-то из них уже не блокируют.
39. Darklight 32 27.04.20 09:59 Сейчас в теме
(38)
ссылочку не дадите?

Я не Java программист - спросите лучше у них, ну или поищите. По C# ссылочку могу дать, коли не найдёте сами (ну или это был саркастический вопрос - тогда поучите Java меня сами). По этому вопросу сейчас Java и C# постоянно передирают друг у друга фишки. Хотя в Java Promise-паттерн появился, вроде бы раньше, а вот модель async\await первой, вроде бы появилась в C# (возможно ранее в другом языке, ну Promise\Future - так вообще очень древняя придумка).

И вы не понимаете что такое асинхронность, постоянно примешиваете туда многопоточность. Вот где здесь поток?:
Ответ = ждать Вопрос(...)

Тогда уж: Ответ = ждать ВопросАсинх(...)
Я не спец по асинхронности. Но модель async\await понимаю хорошо. И я ни разу не утверждал, что тут есть многопоточность (даже в током коде "Ответ = ждать НайтиФайлыАсинх(...)") и что это об одном и том же. Просто без (дополнительного) применения техники многопоточности смысла в модели асинх\ждать в 1С не очень много (именно не очень много, т.к. смысл есть - в красоте кода - но лично я считаю, ради этого можно было и по другому перестроить компилятор - чтобы передать возможность писать условно синхронный код, выполняющийся условно асинхронно - но в том же потоке. То есть - считаю что можно было бы и так писать "Ответ = Вопрос(...)" - а уже компилятор бы сам разобрался - что тут применяется асинхронный вызов (именно когда нельзя применить синхронный из-за особенностей среды выполнения) - и перестроил бы результирующий скомпилированный код на асинхронную модель вызова - без всяких асинх\ждать конструкций - они тут лишние - ибо дополнительного толку (кроме указания перестроить результирующий скомпилированный код например в машину состояний) в них тут почти нет (без многопоточности). А если Вы читали мом посты в этой новости - то поняли бы - что технологии асинхрнности и многопоточностм я активно разделяю!

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

Я изменю своё мнение о полезности применения модели асинх\ждать в 1С - коли это будет так в 18-релизе (ну или в 17-релизе - тут ещё не проверял). В классической модели на колбэк-функциях я проверил в 16-релизе - тут все проверенные мной асинхронные функции (сморите мои посты в этой новости) - выполнялись в одном потоке - основном. И если основной поток был занят - то асинхронные методы останавливались и даже не выполнялись (файлы не начинали искаться, правда диалог формы всё-таки появлялся - но далее был заблокирован) пока не освободится основной поток (аналоично - начав выполняться - асинхронные методы полностью блокировали основной поток) - причина всего этого - полное отсутствие многопоточности в 1С. От того пока и не вижу большого смысла в такой квази-асинхронности. Ну и куча других недостатков мной тоже уже тут была описана!
40. IllayDevel 14 13.05.20 10:30 Сейчас в теме
В окно стучался 2021 год. Люди спорили можно ли на компьютере посчитать одновременно 2+2 и 3+3 дождаться расчета обоих вычислений и сложить результат первого и второго вычисления. Адепты высокоуровнивых языков говорили что легко и просто, а разработчики 1С все про какие-то ограничения платформы и о ненужности вообще такого действия.

Ничего не меняется ((( а жаль. Мне вот в 1с нужна реальная многопоточность для выполнения запросов в параллель. Вот как этими новомодными конструкциями получить итого из двух разных регистров (например остатки номенклатуры по складу и цены номенклатуры). Если все правильно понял, то никак. А тогда один простой вопрос ЗАЧЕМ ЭТО ВСЕ?
It-developer; Irbiz; Denanhel; 7OH; TreeDogNight; +5 Ответить
41. acanta 13.05.20 10:41 Сейчас в теме
(40)
реальная многопоточность

Легко, одна база данных - один поток. Четыре базы - четыре потока. Обрабатываются вместе быстрее чем один.
42. HystriX 25.05.20 16:34 Сейчас в теме
Ну вообще-то такое делается с помощью фоновых заданий, запускаемых в несколько потоков.
tremp; It-developer; +2 Ответить
43. It-developer 24 24.06.20 15:32 Сейчас в теме
На Javascript работал с асинхронностью. Не понравилось
44. 7OH 69 20.07.20 20:11 Сейчас в теме
Кто-то успел попробовать ?
Я что-то асинхронности не увидел.
Пока код не выполнится весь - весь интерфейс висит, как при обычном синхронном вызове ?
В чём суть этой поделки тогда ?
Да и очередь выполнения выдаёт на гора странные вещи.
Прикрепленные файлы:
45. tremp 3 22.07.20 12:58 Сейчас в теме
(44) Асинхронность <> другой поток. А вот если есть будут функции, реализованные на уровне Платформы в другом потоке (как выше писали, например, НачатьКопированиеФайла), то смысл во всем этом будет (именно такие функции "уходили" бы в другой поток и не блокировали основной). Надо проверять.
It-developer; +1 Ответить
46. 7OH 69 22.07.20 14:12 Сейчас в теме
(45) не - я ждал именно для любой функции, и думаю не один я.
Смысл давать делать асинхронной ЛЮБУЮ функцию, если профита от этого ровно ноль ?
А к разделению кода мы уже и привыкли.
It-developer; +1 Ответить
47. tremp 3 22.07.20 16:23 Сейчас в теме
(46)Ну, то что я описал выше - это не изобретение разработчиков платформы - в других языках тоже так. Подозреваю, что слишком большие затраты понадобились бы в общем случае, если бы интерпретатор анализировал бы все дерево вызываемых функций на наличие вызова другого потока.....
48. 7OH 69 22.07.20 16:27 Сейчас в теме
(47) то бишь нам предлагают кота шрёдингера использовать: вроде функция асинхронная любая, но работать будет только если внутри вызывать реально асинхронные, заложенные в платформу.
Ну издевательство же. Зачем давать любую делать ? Вызывайте платформенные прямо из обычных функций и всё - не будет путаницы и неопределенностей.
--
P.S.: лучше бы CAST-ы в запросы добавили.
49. tremp 3 22.07.20 16:35 Сейчас в теме
(48) "Вызывайте платформенные прямо из обычных функций и всё" - если, я правильно, понял, что вы предлагаете, то это был бы "залет" - сколько бы кода сразу перестало корректно работать).
50. 7OH 69 22.07.20 16:41 Сейчас в теме
(49) почему ? у всех новых асинхронных же новый постфикс\префикс
Чтобы работало по новому надо использовать новые функции.
Ничего не сломается.
Это как Вопрос и ПоказатьВопрос. Теперь будет ПоказатьВОпросАсинх.
Не вижу "залета"
51. tremp 3 22.07.20 16:49 Сейчас в теме
(50)согласен - по диагонали прочитал новость. Действительно, вроде, хотят новые функции ввести. Если они действительно будут заканчиваться на "Асинх", то это будет удобно и понятно. В общем получается стандартный подход - как и в других языках.
53. Yashazz 4722 10.11.20 21:16 Сейчас в теме
Почитал тему и понял - как люди путали асинхронность с многопоточностью, так и продолжают путать.
ArchLord42; +1 Ответить
57. ArchLord42 83 08.02.21 11:46 Сейчас в теме
(53) В желтых книгах про это не пишут :))
54. ksavetisyan 04.12.20 21:14 Сейчас в теме
Внесу свои 5 копеек.

Протестировал. Асинхронности как таковой нет.
Вызов последовательно 2х процедур БЕЗ ключего слова "ЖДАТЬ" вешает клиета намертво.


&НаКлиенте
Процедура Тест(Команда)
	
	ДобавитьСимвол("&&", "Реквизит1", 15);
	
	ДобавитьСимвол("!!", "Реквизит2", 3);
	
КонецПроцедуры

&НаКлиенте
Асинх Функция ДобавитьСимвол(Символ, Реквизит, Задержка)
	
	Для Сч1 = 0 по 100 цикл
		
		Для Сч2 = 1 по 100 * Задержка Цикл 		
			Объект[Реквизит] = Объект[Реквизит] + " " + Символ;
		КонецЦикла;
		
	КонецЦикла;
	Сообщить("Готово " + Задержка); 	
КонецФункции

Показать


Думаю комментарии излишне.
Справедливости ради следует признать синтетический сахар в виде отсутствия колбак вызовов - очень приятная штука.
Впрочем почему 1С не сделала так изначально?
55. kalyaka 1056 12.01.21 19:24 Сейчас в теме
(54) Тоже протестировал на копировании файлов, асинхронности не обнаружено, все строго последовательно.
В следующем примере пробовал копировать тяжелый и легкий файлы, затем наоборот - последовательность одинаковая.
&НаКлиенте
Асинх Процедура СкопироватьФайл1(Сообщения)
	ИмяФайлаИсточника = "Источник";
	ИмяФайлаПриемника = "Приемник";
	Ждать КопироватьФайлАсинх(ИмяФайлаИсточника, ИмяФайлаПриемника);
	Сообщения.Добавить("Скопирован файл 1");
	Сообщить("3:
	|"+СтрСоединить(Сообщения, Символы.ПС));
КонецПроцедуры

&НаКлиенте
Асинх Процедура СкопироватьФайл2(Сообщения)
	ИмяФайлаИсточника = "Источник";
	ИмяФайлаПриемника = "Приемник";
	Ждать КопироватьФайлАсинх(ИмяФайлаИсточника, ИмяФайлаПриемника);
	Сообщения.Добавить("Скопирован файл 2");
	Сообщить("4:
	|"+СтрСоединить(Сообщения, Символы.ПС));
КонецПроцедуры

&НаКлиенте
Процедура КомандаСкопироватьФайл(Команда)
	Сообщения = Новый Массив;
	СкопироватьФайл1(Сообщения);
	Сообщения.Добавить("Копирование файла 1");
	Сообщить("1:
	|"+СтрСоединить(Сообщения, Символы.ПС));
	СкопироватьФайл2(Сообщения);
	Сообщения.Добавить("Копирование файла 2");
	Сообщить("2:
	|"+СтрСоединить(Сообщения, Символы.ПС));
КонецПроцедуры
Показать
Аналогично для следующего фрагмента файлы также будут скопированы строго последовательно
&НаКлиенте
Асинх Процедура СкопироватьФайл(Файл, Индекс)
	ИмяФайлаИсточника = Файл.ПолноеИмя;
	ИмяФайлаПриемника = СтрЗаменить(ИмяФайлаИсточника, "Источник", "Приемник");
	Ждать КопироватьФайлАсинх(ИмяФайлаИсточника, ИмяФайлаПриемника);
	Сообщить(СтрШаблон("3. Скопирован файл %1 - %2", Индекс + 1, Файл.Имя));
КонецПроцедуры

&НаКлиенте
Асинх Процедура СкопироватьФайлы()
	НайденныеФайлы = Ждать НайтиФайлыАсинх("C:\Temp\Источник", "*.*");
	
	Для Индекс = 0 По НайденныеФайлы.ВГраница() Цикл
		СкопироватьФайл(НайденныеФайлы[Индекс], Индекс);
	КонецЦикла;
	
	Сообщить("2. Копирование файлов асинх");
КонецПроцедуры

&НаКлиенте
Процедура КомандаПаралельноеКопирование(Команда)
	СкопироватьФайлы();
	Сообщить("1. Копирование файлов");
КонецПроцедуры
Показать
56. ArchLord42 83 08.02.21 11:44 Сейчас в теме
(54)
(55)

Какое открытие!) Вам следуют разобрать что такое асинхронность и что такое многопоточность.
И про UI поток почитать заодно...
58. kalyaka 1056 08.02.21 11:48 Сейчас в теме
(56) Ну я немного знаком с моделью асинхронности в веб-браузере. От 1С я ожидал чего-нибудь подобного: отдельный приоритезированный поток UI, порционное исполнение стека обещаний, исполнение асинхронных функций в отдельном потоке операционной системы.
59. silberRus 72 04.05.21 20:19 Сейчас в теме
чет я не понял,
т.е. если я из обычной процедуры выозву асинхронную, то у меня процедура обычная завершится только после того как ожидание примет свой окончательный вид?
60. unduty 01.10.21 18:47 Сейчас в теме
Открываю бухгалтерию и иду пить кофе, пока вся эта асинхронность обновит рабочий стол. Потом весь день будет тупить на каждом всплывающем сообщении. Про мобильную платформу вообще молчу, видимо ее сделали под пентиум 3 и не знают, что сейчас все смартфоны многоядерные. Приложения уже давно используют десятки потоков на клиенте, это позор компании с таким бюджетом.
Оставьте свое сообщение

См. также

Фирма «1С» возглавила ежегодный рейтинг франшиз по версии РБК

Новость ИТ-Новость

РБК ежегодно составляет рейтинг наиболее популярных российских франшиз. На протяжении многих лет фирма «1С» лидирует среди прочих предложений на рынке франчайзинга.

вчера в 16:39    115    ЕленаЧерепнева    0       

1

Фирма «1С» дополнила перечень продуктов, которые подорожают с 1 июля 2024 года

Новость

Обновление прайс-листа 1С на типовые и отраслевые лицензии в этом году проводится в два этапа – с 1 апреля и 1 июля. В список конфигураций, которые подорожают летом, добавлено еще несколько позиций.

вчера в 14:02    801    ЕленаЧерепнева    0       

1

Сегодня, в 12:00, стартует бесплатный вебинар Марии Темчиной по разбору ошибок в управлении ИТ-проектами

Новость Обучение Руководитель проекта

Успейте подключиться к онлайн-встрече, где на реальных кейсах мы разберем проблемные ИТ-проекты, узнаем, как избежать ошибок или как исправить совершенные.

вчера в 10:30    686    AnastasiaKl    0       

2

Обновление «1С:Документооборот КОРП 3.014»: очень много приятных мелочей

Новость

В релиз «1С:Документооборот КОРП 3.014» вошли улучшенные интеграции с 1С-сервисами: они расширяют возможности конфигурации. Улучшена функциональность самого продукта – разработчики добавили новые инструменты для работы с документами и файлами.

12.04.2024    1096    ЕленаЧерепнева    0       

2

Бесплатный онлайн-вебинар «1С:Аналитика – BI-система на платформе 1С»

Новость

Приглашаем на бесплатный вебинар по системе «1С:Аналитика», где мы поговорим о ее возможностях, расскажем реальные кейсы успешного внедрения системы, а также в формате круглого стола ответим на вопросы слушателей.

11.04.2024    1283    AnastasiaKl    1       

15

Отвечаем на вопрос: зачем публиковать свои решения в Базе знаний Инфостарт

Новость Сообщество

Если вы еще сомневаетесь, вливаться ли в наше сообщество, обязательно прочитайте эту статью.

11.04.2024    725    Sofya_Sukur    6       

12

Фирма «1С» актуализировала состояние плана задач для 1С:Предприятие 8.3.27

Новость Зазеркалье

Опубликован перечень задач, которые планируется реализовать для технологической платформы версии 8.3.27. Большая часть задач отмечена как выполненные, часть перенесена на следующий релиз, задач со статусом «в работе» в плане не осталось.

10.04.2024    511    ЕленаЧерепнева    0       

2

Учет по проектам в 1С Бухгалтерии v 2.9: главные обновления

Новость Маркетплейс

Учет рабочего времени по проектам и распределение заработной платы по отработанным часам в новой версии расширения «Учет по проектам в 1С:Бухгалтерии 3.0». Рассказываем об обновлениях подробнее.

09.04.2024    719    user997184    0       

2

Сегодня стартует курс по 1С:Аналитике: успейте присоединиться

Новость Обучение

Сегодня, в 16:00 по Мск, состоится первый из четырех вебинаров онлайн-курса «Работа с 1С:Аналитика». Еще есть время записаться на обучение, где вы узнаете, как работать в системе и максимально использовать ее функционал.

09.04.2024    707    AnastasiaKl    0       

15

Бесплатный вебинар «Аналитика маркетплейсов из одного окна»

Новость Маркетплейс

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

08.04.2024    785    user997184    0       

13

12 апреля – бесплатный вебинар «Быстрый анализ медленных операций системы 1С»

Новость

12 апреля состоится бесплатный вебинар о том, анализировать проблемы производительности 1С с помощью программного продукта «Алькир». На вебинаре протестируем «Алькир» в работе и с его помощью проверим гипотезы при расследовании проблем.

08.04.2024    1046    user997184    1       

16

INFOSTART TECH EVENT 2024: 11 апреля меняем цены на участие

Новость Infostart Event Мероприятия

Осенняя конференция Инфостарт пройдет с 10-12 октября 2024 года. Чем ближе дата мероприятия, тем меньше скидка на покупку билетов на конференцию. Очередное плановое изменение цены произойдет 11 апреля.

08.04.2024    905    AnastasiaKl    0       

16

Объявляем прием заявок в секцию «Открытый микрофон»

Новость Aнализ&Управление Мероприятия

Постоянная рубрика конференции «Анализ и Управление в ИТ-проектах» – «Открытый микрофон». Для вас – это возможность попробовать свои силы, продвинуть личный бренд и все-таки выступить с докладом, если вы не пройдете в финальную программу.

04.04.2024    909    user997184    0       

15

В сервисе «1С-Курьерика» для автоматизации собственной доставки обновлены тарифы

Новость Сервисы ИТС

Фирма «1С» сообщила о начале продаж нескольких дополнительных тарифов для подписки на сервис «1С:Курьерика» . Например, теперь клиентам предлагают бесплатный промо-тариф на месяц.

04.04.2024    833    ЕленаЧерепнева    1       

2

Отвечаем на вопросы по работе с GitFlic – российским аналогом решений для хранения, обмена и работы с кодом

Новость

11 марта на Инфостарт прошел бесплатный вебинар-знакомство с продуктом GitFlic. GitFlic – первая российская платформа для удобной и быстрой работы с исходным кодом, и его хранения.

03.04.2024    1097    user997184    0       

1

Работа с 1С:Аналитика: старт курса через неделю

Новость Обучение Программист

9 апреля, во вторник, начнется обучение на курсе по системе «1С:Аналитика». На курсе мы узнаем о возможностях системы, в том числе и об обновленном функционале, и научимся в ней работать.

02.04.2024    1044    AnastasiaKl    0       

15

Заполните анкету и получите 15+ полезных материалов для руководителей проектов

Новость Обучение Руководитель проекта

Мы собрали бесплатный гайд для начинающих руководителей, в котором разбираем основные проблемы на управленческом пути каждого руководителя и подсказываем, как можно с ними справиться.

01.04.2024    1241    AnastasiaKl    0       

16

Единый семинар 1С – регистрируйтесь и получайте подарки от Инфостарт

Новость Сервисы ИТС

Уже в среду, 3 апреля, состоится «Единый семинар 1С». Онлайн-семинар предназначен для бухгалтеров, финансовых директоров, ИТ-специалистов и кадровых работников предприятий малого и среднего бизнеса.

01.04.2024    938    user997184    0       

16

Вебинар по 1С-Коннект: публикуем ответы на вопросы слушателей

Новость Сервисы ИТС

Бесплатный онлайн-вебинар по сервису «1С-Коннект» и его новым возможностям прошел 26 марта. На встрече мы подробно рассказали о функционале сервиса: основные функции, организация видеоконференций и работы техподдержки в режиме «единого окна».

01.04.2024    781    AnastasiaKl    0       

16

Infostart УДиФ 2024.1: Больше возможностей управления контролями данных. Выгрузка, загрузка настроек

Новость InfostartToolkit Маркетплейс Новый релиз Обзор готовых решений

В новой версии продукта Infostart УДиФ 2024.1 появилась возможность выгружать и загружать настройки, устанавливать отдельные проверки для проведения документов, совершать групповые действия с выделенными строками контролей данных и обработчиков.

01.04.2024    977    vikad    0       

10

Разрешительный порядок маркировки поддержан в решениях для малой розницы

Новость Маркировка

Фирма «1С» обновила решения для малой розницы. В 1С:Кассе и в 1С:Мобильной кассе реализована поддержка разрешительного порядка маркировки, расширены функциональные возможности и исправлены выявленные ошибки.

29.03.2024    827    ЕленаЧерепнева    0       

1

Чек-лист для всех, кому грозит разрешительный режим продаж маркированных товаров

Новость 1С:Розница 3.0 1С:Управление нашей фирмой 3.0 ИТ-Новость Маркировка

С 1 апреля для некоторых товарных категорий начинает действовать разрешительный режим продаж маркированного товара. Специалисты фирмы «1С» обобщили уже имеющиеся у них данные о проблемах перехода и подготовили специальный чек-лист.

29.03.2024    1646    ЕленаЧерепнева    2       

2

Быстрый запуск 1С и не только: ждем в 8.3.26

Новость Зазеркалье

Официальный технологический блог сообщил об оптимизации технологической платформы версии 8.3.26. Для улучшений, вошедших в релиз, на тестовых стендах получено ускорение от 2 до 6.5 раз.

29.03.2024    3986    ЕленаЧерепнева    3       

4

WhatsApp или SMS?

Новость Маркетплейс

В среднем 2/3 россиян используют мессенджер WhatsApp каждый день. В октябре 2023 года ежемесячный охват WhatsApp составил 78.4% населения России (за период октябрь 2022-2023 года этот показатель вырос на 8.8%). С развитием технологий мессенджеры стали серьезным оружием в сфере продаж. В этой статье мы рассмотрим WhatsApp с точки зрения его возможностей, осветим преимущества и недостатки в сравнении с SMS-сообщениями.

28.03.2024    986    dpershin    2       

1