Вход | Регистрация
    1  2   
1С:Предприятие :: 1С:Предприятие 8 общая

Тест на понимание Асинх

Тест на понимание Асинх
Я
   Почему 1С
 
16.06.21 - 20:59
2. 3, 1, 2100% (2)
1. 1 , 2 , 30% (0)
3. 2, 3, 10% (0)
Всего мнений: 2

Ниже дан код, не выполняя его в 1С выберите правильный вариант. Что выведится в сообщения по порядку.

&НаКлиенте
Асинх Процедура Команда1(Команда)
    Сообщить("1");
    а = Тест();
    Сообщить("2");
    b = ждать а;
    Сообщить("3");
КонецПроцедуры

&НаКлиенте
Асинх Функция Тест()
    Возврат 5;
КонецФункции
   ДНН
 
1 - 16.06.21 - 21:49
Должно быть 1,2,3
Но 1С выведет 3,1,2. Причем визуально это будет выглядеть как будто сначала вывелось правильно, а потом 3 переместилась наверх
   acht
 
2 - 16.06.21 - 22:02
Смотрю и понимаю, что геня даже свой подход "гуру-тестов" и тот не сам выдумал...
   vde69
 
3 - 16.06.21 - 22:48
а где в сабже асинхронность?
   Сергиус
 
4 - 17.06.21 - 00:24
Асинх это новая директива в 1с или что?
   PR
 
5 - 17.06.21 - 00:27
   ДенисЧ
 
6 - 17.06.21 - 06:19
(4) Эх... Бросить всё и уехать в "Москва, Россия" (с) почти анекдот.
   Почему 1С
 
7 - 17.06.21 - 06:26
(3) Ну так что выведется? И как это называется?
   dmt
 
8 - 17.06.21 - 08:57
странное поведение
   dmt
 
9 - 17.06.21 - 09:00
причем если в отладчике постоять секунду на строке Сообщить(3) и только затем ее выполнить, то порядок сообщений будет нормальным )
   Smit1C
 
10 - 17.06.21 - 09:04
Как-то так

2. 3, 1, 2
   Вафель
 
11 - 17.06.21 - 09:14
По идее должно быть 1,2,3
Как сделала 1с - хз
   Smit1C
 
12 - 17.06.21 - 09:17
ИМХО: Там просто Сообщить("3") в миллесекундах обгоняет асинхронный вызов Сообщить("1") и Сообщить("2"), если поставить паузу перед Сообщить("3"), то выведется 1,2,3.
Поправьте если я не прав...
   Почему 1С
 
13 - 17.06.21 - 09:17
(10) Сможешь объяснить почему так работает?
   ДенисЧ
 
14 - 17.06.21 - 09:19
(12) А с чего Сообщить("1") стал асинхронным, а Сообщить("3") - нет?
   Почему 1С
 
15 - 17.06.21 - 09:19
(12) Можно в функции тест запулить цикл на 100000 итераций, результат не изменится
   ДНН
 
16 - 17.06.21 - 09:19
(13) Потому что это ошибка 1С. Видимо связанная с Сообщить. Если вместо Сообщить использовать ЗаписьТекста и писать в файл, то будет записано 1,2,3
   dmt
 
17 - 17.06.21 - 09:23
(12) похоже на конкретный баг в Сообщить. Пауза перед Сообщить(3) в 600 мс дает примерно половину сообщений в правильном порядке.
   Smit1C
 
18 - 17.06.21 - 09:27
(15)

Асинх Процедура КомандаА(Команда)
    
    
    Сообщить("1");
    а = Тест();
    
    Сообщить("2");
    b = ждать а;
    
    ТекДата = ТекущаяДата();
    Пока ТекДата+5>=ТекущаяДата() Цикл КонецЦикла;
    
    Сообщить("3");
    
КонецПроцедуры


выведет 1,2,3
   TormozIT
 
19 - 17.06.21 - 09:29
Используй обычное приложение. Там вывод сообщений синхронный. Поэтому визуальный порядок сообщений будет соответствовать порядку из вывода.
   ДенисЧ
 
20 - 17.06.21 - 09:37
(19) а в 77 вообще никакой асинхронности нет.. Давайте хором на 77 перейдём )))
   Почему 1С
 
21 - 17.06.21 - 09:47
(18) При чем прилично нужно подождать, чтобы порядок заработал. на цикле в 100к элементов порядок не правильный, а уже на 1кк становится правильным. Никак не в миллисекундах дело выходит
   Garykom
 
22 - 17.06.21 - 09:59
Объясните нахера в платформу 1С добавили другой вид асинхронности?
Когда уже есть одна с оповещениями при отказе от модальности?
   Garykom
 
23 - 17.06.21 - 10:01
(22)+ Синтаксический сахар?
А предыдущий депрекатировать будут или так и будут раздувать платформу вместо того чтобы ее сократить-оптимизировать и сосредоточиться на вылизывании и обезбаживании?
   Garykom
 
24 - 17.06.21 - 10:03
Сцуко вы еще лямбда-функции добавьте анонимные в виде замыканий
   sikuda
 
25 - 17.06.21 - 10:04
(23) Так что же нам предложили в 2009 году как прикладным программистам? Получается нам предложили callback, завернутый в ОписаниеОповешения(). И даже функции работы с обещаниями в 8.3.18 не меняют этой сути, а просто перепаковывают примерно как программисты javascript свои callback-и в promise. Но в отличие от Web вся остальная схема работы 1С осталась синхронной. Взаимодействие с сервером в 1С само синхронно — последовательно вызываются функции клиента и сервера, ответ у HTTPЗапрос — получаем последовательно. А ОписаниеОповещения повесили на клиента и функции взаимодействия с пользователем.
Нет не все функции в 1С будут прикрывать столь срамную реализацию. Есть и правильная тенденция в ПолучитьФайлССервера с несколькими Оповещениями(callback) и в них мы как раз начинаем получать правильное использование технологии.
В общем
https://blog.sikuda.ru/wp-content/uploads/2020/01/TransferFile.png
   Garykom
 
26 - 17.06.21 - 10:06
(25) Так и я про что?
Раннее фуйню спороли а сейчас вместо того чтобы ее исправить придумали еще одну
   fisher
 
27 - 17.06.21 - 10:07
(1) +1
На файловой 8.3.18.1363 выводится именно так.
Это какой-то прикол буфера сообщений. Уже была где-то длинная ветка с паззлерсом, где сообщения чуть ли не затраивались или что-то в этом духе. Не помню подробностей, к сожалению.
Если одновременно с Сообщить() заполнять массив, то массив будет заполнен ожидаемо.
   Garykom
 
28 - 17.06.21 - 10:07
Имхо давно пора делать чтобы клиент 1С мог работать (вызывать) несколько любых/разных серверов 1С ))
Асинхронно
   Chai Nic
 
29 - 17.06.21 - 10:09
Асинхронность без многопоточности - зло.
   oslokot
 
30 - 17.06.21 - 10:10
Я один не понимаю что это за асинх и зачем она нужна в 1С ?
 
 
   fisher
 
31 - 17.06.21 - 10:10
(22) В смысле - нахера? Попробуй цепочку асинхронных вызовов написать в старом стиле и посмотри какая лапша получается. Сделали почти как у взрослых - так гораздо удобнее.
(33) Да, сахар. Сладкий. Старый задиприкейтят, куда деваться.
   1Сергей
 
32 - 17.06.21 - 10:13
(0) Ничего не выведет. вывалится в ошибку на строке "b = ждать а;"
   Chai Nic
 
33 - 17.06.21 - 10:16
(30) Для совместимости с мозгами джавистов и их творчеством для смартфонов
   sikuda
 
34 - 17.06.21 - 10:17
(31) Анекдот в тему:
"Павел, а можно задать вопрос асинхронно?
А где установить флажок чтобы старая функция ПоместитьФайл стала работать так как ПоместитьФайлНаСерверАсинх без дополнительных заклинаний АСИНХ и Ждать? Спасибо"
   fisher
 
35 - 17.06.21 - 10:17
(1)(27) + Причем действительно визуально видно, как сначала выводятся 1, 2 а потом первым втыкается 3. То есть очевидно при выводе сообщений еще как-то хитро порядок может восстанавливаться и просто в этом случае он восстанавливается неправильно. То ли баг, то ли фича.
   Вафель
 
36 - 17.06.21 - 10:18
Асинхронность нужна чтобы в браузере работало
   oslokot
 
37 - 17.06.21 - 10:19
(33) (36) ну дык оно и щас работает через описаниеоповещения и т.д.
   fisher
 
38 - 17.06.21 - 10:21
Вас, плять, не понять. То плачут что язык не развивается. А когда развивается - плачут что остаются старые варианты синтаксиса. А если бы вырезали - плакали бы что обратную совместимость сломали.
Хлебом не корми - дай поплакать.
   oslokot
 
39 - 17.06.21 - 10:22
Работает - не трожь (с)
   Почему 1С
 
40 - 17.06.21 - 10:22
(32) а на Асинх первее не заругается?
   1Сергей
 
41 - 17.06.21 - 10:23
(40) кстати, да
   fisher
 
42 - 17.06.21 - 10:23
(41) С 18 релиза только.
   Chai Nic
 
43 - 17.06.21 - 10:27
(39) Оно и дальше бы работало без асинхронности. Собственно, отрасли учетных систем это нафиг не сдалось. Но пришлось влезать в облака, веб и смартфоны. А там сихронный код некомильфо.
   Garykom
 
44 - 17.06.21 - 10:28
(34)
>Анекдот в тему:
>"Павел, а можно задать вопрос асинхронно?
>А где установить флажок чтобы старая функция ПоместитьФайл стала работать так как ПоместитьФайлНаСерверАсинх без дополнительных заклинаний АСИНХ и Ждать? >Спасибо"

а ты хорош!

действительно просто верните синхронность на место, точнее скройте под капотом всю эту асинхронную муйню

и просто разрешите писать банально ПоместитьФайл() а что там будет и как выкручиваться и синхронно или нет плевать
   1Сергей
 
45 - 17.06.21 - 10:28
(42) Почитал. Да, всё-таки ругнётся на ждать
   fisher
 
46 - 17.06.21 - 10:47
(44) > скройте под капотом всю эту асинхронную муйню
Не все там так просто. Неспроста требуют функции с использованием асинхронности тоже как асинхронные в объявлении описывать. Они сразу должны особым образом компилиться/исполняться, как возвращающие промисы вместо обычных значений возврата. Для них отдельная механика и их надо сразу различать. Да и слишком много под капот - тоже плохо. Синтаксис с промисами как раз мне вполне нравится. Он и удобный/компактный и при этом не дает забыть, что происходит на самом деле. У таких же функций еще ряд особенностей есть. Передача параметров по значению, например. И это тоже нужно помнить.
   fisher
 
47 - 17.06.21 - 10:50
Да и вообще это не 1С изобретение. Слизали с того же js.
   Garykom
 
48 - 17.06.21 - 11:01
(46) Все функции "как асинхронные в объявлении описывать" и все
Во многих ЯП не требуется отдельно, все зависит от вызова/контекста
   Garykom
 
49 - 17.06.21 - 11:03
И да &НаСервере и &НаКлиенте это изврат вот с него все началось!
Надо было оставить это в разных модулях чисто серверных и чисто клиентских и чисто "без контекста" если уж так хочется
   Garykom
 
50 - 17.06.21 - 11:04
И самый изврат это в чисто дябильном ограничении (в мозгах разработчиков) что сервер не может клиента вызывать

Ибо Сообщить() вызванное на &НаСервере каким то магическим образом сообщает на клиенте! :)
   fisher
 
51 - 17.06.21 - 11:05
(48) > Во многих ЯП не требуется отдельно
Перечисли несколько из многих.
   fisher
 
52 - 17.06.21 - 11:07
(49) Ты бы первый брызгать начал мол "дебилы, прыгай теперь все время между модулями, контекст держать трудно, нет чтобы через аннотации сделать!"
   Chai Nic
 
53 - 17.06.21 - 11:09
И кстати аннотации лучше было делать суффиксом, по типа ключевого слово "Экспорт" в определении. А без этого нелепого амперсанда.
   Chai Nic
 
54 - 17.06.21 - 11:10
+(53) И в этом плане Асинх как префикс - уродство дикое
   Garykom
 
55 - 17.06.21 - 11:12
(52) Так один хрен между модулями прыгать сейчас приходится
   fisher
 
56 - 17.06.21 - 11:12
(53)(54) А мне норм.
(55) Ну а был бы вообще калейдоскоп.
   Garykom
 
57 - 17.06.21 - 11:13
Аннотации кстати это говно
Еще со времен Java раздражают где вся JPS на них
   Garykom
 
58 - 17.06.21 - 11:13
(57) *вся JPA
   fisher
 
59 - 17.06.21 - 11:14
(57) Ага. Сказали в golang а потом начали комменты парсить при кодогенерации.
   Garykom
 
60 - 17.06.21 - 11:14
(56) модуль менеджера и модуль объекта не калейдоскоп?
 
 
   Garykom
 
61 - 17.06.21 - 11:14
(59) угу тоже начали местами в какую то не ту хрень идти
   Garykom
 
62 - 17.06.21 - 11:15
(60)+ сцуко почему не сделали "аннотации" &ЭтоМенеджер и &ЭтоОбъект ???
   fisher
 
63 - 17.06.21 - 11:15
(60) Нет. А вот при программировании формы без разделения экрана на две части вообще не представляю, как бы работал.
   Garykom
 
64 - 17.06.21 - 11:18
(63) Ты не поверишь
В свое время прекрасно "программировал форму" только кодом

Да и сча когда надо 3D нарисовать беру https://ru.wikipedia.org/wiki/OpenSCAD где кодом/скриптами
   Garykom
 
65 - 17.06.21 - 11:20
(64)+ У меня прекрасное объектно-визуальное мышление, могу за конфигуратор сам в воображении форму по коду рисовать
   Chai Nic
 
66 - 17.06.21 - 11:20
(60) Модуль менеджера так то штука логичная. За исключением модулей менеджера обработок и отчетов. Их использование ничем нельзя оправдать.
   fisher
 
67 - 17.06.21 - 11:20
(64) Я про то, что если бы код формы явно делился на два модуля, клиентский и серверный как ты предлагаешь, то человечески работать можно было бы только одновременно имея оба модуля перед глазами.
   fisher
 
68 - 17.06.21 - 11:22
Потому что клиент-серверный код формы плотно увязан между собой и надо постоянно держать общий контекст.
   Garykom
 
69 - 17.06.21 - 11:23
(67) расскажи это бэкендерам с фронтэндерами и фуллстеками веб
   Garykom
 
70 - 17.06.21 - 11:25
(69)+ Сцуко сколько я себя приучивал на лету читать &НаСервере и &НаКлиенте
Вместо логичного другого модуля к которым уже вполне привык до этого
   fisher
 
71 - 17.06.21 - 11:25
(69) Это только фуллстекам рассказать можно. Остальные не поймут. А им рассказывать нельзя. Иначе они будут плакать горючими слезами и проситься в 1С.
   Garykom
 
72 - 17.06.21 - 11:26
(71) ты не понимаешь?

когда у тебя сервер и клиент разные то очень логично и понятно когда код в разных модулях
и как раз дикая путаница если в одном с аннотациями
   fisher
 
73 - 17.06.21 - 11:28
(72) Не. Не понимаю. Мне вполне комфортно. Никакой выгоды от отдельного модуля не вижу. А выговор от указательного пальца точно получу.
   fisher
 
74 - 17.06.21 - 11:31
Не. Выгоду вижу - не пришлось бы аннотации писать. Получается, сколько ты модулей предлагаешь, три? А когда захочешь одну и ту же функцию на клиенте и сервере - копи-паст или четвертый модуль?
   DrZombi
 
75 - 17.06.21 - 11:32
(0) Тест липовый, нужно нормально так...
С использованием всех правил 1С Языка программирования и возможности Серверной версии 1С :)
   ДенисЧ
 
76 - 17.06.21 - 11:32
(74) Для одной функции - ln -s )))
   Garykom
 
77 - 17.06.21 - 11:37
(74) Я хочу сказать что контекст где выполняться должно определяться автоматически или непосредственно при запуске/вызове процедуры/функции

Т.е. модуль один и там никаких аннотаций, просто
Процедура МояПроцедура()

А вот в коде
НаСервере МояПроцедура() или НаКлиенте МояПроцедура() если принудительно указываешь и просто МояПроцедура() если на автомат платформы полагаемся
   Garykom
 
78 - 17.06.21 - 11:39
(77) Ву компрене?
   Вафель
 
79 - 17.06.21 - 11:40
(77) в 1с не увидели смысла писать такой автомат
   Garykom
 
80 - 17.06.21 - 11:40
(79) Точнее "не шмогла"
   Вафель
 
81 - 17.06.21 - 11:42
(80) просто посчитали не нужным выделять столько денег на разработку данной фичи
   fisher
 
82 - 17.06.21 - 11:49
(77) Уже общий? Только ж разделять хотел по модулям. Мне такое не нравится. Я хочу видеть явное разделение мест исполнения иначе легко завтыкать.
Вот контекстные/неконтекстные автоматически определять можно было бы. Но на практике это бы замедлило компиляцию модулей. Т.е. либо время старта, либо первое обращение к объекту. Это неприемлемая цена за такой сахар. Тогда только на полную предкомпиляцию переходить, а тут свои минусы.
   Serginio1
 
83 - 17.06.21 - 11:53
(23) Тем, что в JS появился async await и уже давно. А отказ от модульности на событиях причем еще и метод в текстовом виде ....
   Garykom
 
84 - 17.06.21 - 11:57
(82) Или разные модуля или по контексту при вызове
А вот эти аннотации полная глупость и вынуждают иногда дублировать код, если одна функция и на клиенте и на сервере может выполняться и не надо делать долгий вызов сервера
   fisher
 
85 - 17.06.21 - 12:04
(84) Баба Яга против. Вполне нормальный инженерный компромисс получился. А ты как-то из крайности в крайность кидаешься. То тебя хлебом не корми дай красивое разделение на клиент/сервер по модулям, то вообще не нужно никакого разделения и пускай разработчик с платформой по очереди репу чешут.
   Garykom
 
86 - 17.06.21 - 12:06
(85) Не надо таких компромиссов
И несколько версий платформы параллельно не надо!
Нужна одна но без глюков
   fisher
 
87 - 17.06.21 - 12:09
Я не против.
Согласен быть богатым. Согласен быть счастливым.
   fisher
 
88 - 17.06.21 - 12:15
Что там кстати насчет (51)?
   BIP1
 
89 - 17.06.21 - 12:21
(0) Сначала выводится "3", потом "1,2", а потом "3,1,2".
   Chai Nic
 
90 - 17.06.21 - 15:11
(72) &НаСервере и &НаКлиенте это полное соответствие парадигмы пхп/джаваскрипт, когда в одном коде вперемешку и серверные и клиентские процедуры..
   Garykom
 
91 - 17.06.21 - 15:20
(90) эээ давным давно принято js отдавать отдельными файликами а не засовывать в динамически формируемую html кодом на php
   minsk1s
 
92 - 17.06.21 - 15:24
(30) Если Вы не понимаете зачем это в 1С, скорее всего Вы не понимаете, что это такое в принципе...
Чтобы не читать талмуды ИТС, небольшой FAQ по Асинх: https://1cnik.by/asinhronnye_funkcii.php
   minsk1s
 
93 - 17.06.21 - 15:27
как-то так

2. 3, 1, 2
   Garikk
 
94 - 17.06.21 - 15:31
(90) так давно никто не делает (битрикс не считается)
запросы к беку только через аякс, html шаблонной статикой, отрисовка фиксированными js-ами
   Garykom
 
95 - 17.06.21 - 15:37
(88) http://golang-book.ru/chapter-10-concurrency.html
package main

import "fmt"

func f(n int) {
    for i := 0; i < 10; i++ {
        fmt.Println(n, ":", i)
    }
}

func main() {
    go f(0)
    var input string
    fmt.Scanln(&input)
}


По сути тоже самое но у функции никакого признака Асинх в описании/объявлении нет, только при вызове
И да там где надо получить ответ некий аналог Ждать
   fisher
 
96 - 17.06.21 - 15:44
(95) Многопоточность и асинхронность - не совсем одно и то же.
   Garykom
 
97 - 17.06.21 - 15:46
(96) Это одно и тоже когда количество разрешенных потоков = 1

В примере на Golang многопоточность + асинхронность
   Garykom
 
98 - 17.06.21 - 15:47
(97)+ например нода она однопоточная асинхронная изначально
   Cthulhu
 
99 - 17.06.21 - 15:53
(25): Матвей, там у тебя на сайте ошибка: ссылка на "2. Online консоль запросов" ведет в никуда: Not Found / The requested URL /хттп://ццц.итс22.ру/zaprosi-1s-8 was not found on this server. / Apache/2.4.6 Server at blog.sikuda.ru Port 80)
   fisher
 
100 - 17.06.21 - 15:55
(95)(97) Согласен. Горутины, конечно, киллер-фича.
  1  2   

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.