Имя: Пароль:
1C
1С v8
А что, собственные асинхронные функции писать не получится?
0 fisher
 
16.06.21
15:01
Я-то губу раскатал что с введением промисов/асинк/эвэйтов получится наконец сделать красивое асинхронное выполнение произвольных функций в фоне через промисы... А они! Ненавижу!!
1 polosov
 
16.06.21
15:06
  Процедура П()

       Попытка

           Функ1();

       Исключение

       // Исключение из Функ1() не будет перехвачено здесь

       КонецПопытки

   КонецПроцедуры



   Асинх Функция Функ1()

       ВызватьИсключение "Выброшено в Функ1()";

   КонецФункции
2 polosov
 
16.06.21
15:07
(0) Ааа ты про фон.
3 Necessitudo
 
16.06.21
15:08
Будем ждать от 1С реактивности)
4 polosov
 
16.06.21
15:10
(0) см. ДлительныеОперацииКлиент.ОжидатьЗавершение()
5 mistеr
 
16.06.21
15:13
(0) Реализовать реальную многопоточность в рамках сеанса это намного сложнее, чем добавить синтаксический сахар.
6 acht
 
16.06.21
15:13
(0) > произвольных функций в фоне
А кто тебе фоновое выполнение обещал? Найти его, в морду плюнь. Асинхронность и мультипоточность - вещи разные.
7 polosov
 
16.06.21
15:14
(0) Ну и в целом как ты себе это видишь? Ты запускаешь фоновое задание на сервере. Сервер ни сном не  духом, живой ты клиент или по HTTP клиентом прикидываешься. И как тебя оповещать то.
8 fisher
 
16.06.21
15:17
(6) Фоновое выполнение я сам реализую.
Но была надежда, что наконец получится реализовать такое:
Результат = Ждать ВыполнитьФоново(ПутьФункции, ПараметрыФункции);
И для этого не так-то и много нужно было.
9 mistеr
 
16.06.21
15:19
(8) И что в это время будет делать клиент? Таки ждать (часики-котики)?
10 polosov
 
16.06.21
15:20
(8) Ты перегрелся? Чем это отличается от
Результат = ВыполнитьПРостоНаСервере(ПутьФункции, ПараметрыФункции);
11 fisher
 
16.06.21
15:21
(9) Сейчас - да. А если бы в 1С добавили на клиенте паузу с возвратом управления в основной поток - то было бы элементарно сделать, чтобы ему в это время отображался прогресс выполнения.
12 fisher
 
16.06.21
15:22
Точно так же, как сейчас в БСП реализовано. Только в новом элегантном синтаксисе.
13 polosov
 
16.06.21
15:22
(11) Ты (4) смотрел?
14 fisher
 
16.06.21
15:23
(13) А ты (8) смотрел?
15 ДенисЧ
 
16.06.21
15:26
Не угадал автора по заголовку ((
16 mistеr
 
16.06.21
15:29
(14) Главный вопрос — в каком сеансе происходит выполнение?
17 shpioleg
 
16.06.21
15:32
(0) На youtube смотрел ролик от Веселый1С Асинх/Ждать или Как устроены асинхронные процедуры в 1С  ?
18 fisher
 
16.06.21
15:35
(16) У меня нет вопросов. Только недоумение.
(17) Нет. А надо?
Добавили в 1С человеческий синтаксис для работы с асинхронностью. Чудесно. Но де-факто асинхронно можно выполнять только встроенные функции, которые это умеют. Хорошо, конечно, что хотя бы не будет лапши из стандартных диалогов и оповещений. Но блин! Что стоило сделать еще один маленький шажочек?
19 ДенисЧ
 
16.06.21
15:38
(18) жди .2*
Может, сделают.
20 polosov
 
16.06.21
15:38
(18) Ты опиши сценарий когда при длительном серверном вызове это нужно.
21 fisher
 
16.06.21
15:40
(20) Ищи в типовой свои сценарии по ключевому слову ДлительныеОперации
22 Said_We
 
16.06.21
15:42
(18) А что мешало добавить АвтономерЗаписи() в SQL запросе не только к внутренним таблицам? При использовании АвтономерЗаписи() необходимо указать обязательно Упорядочить ПО.
Во внутренней таблице при использовании "Упорядочить По" обязательно указывать "Выбрать первые ХХХ".

Вот за тем всё так и есть. :-)

Потому что гладиолус.
Кушайте не обляпайтесь.
23 Почему 1С
 
16.06.21
15:47
(0) Я тоже так подумал , пока не понял что из собственной асинхронной функции нельзя вернуть Обещание.
Ждем 8.4
24 polosov
 
16.06.21
15:48
(21) Сервер не может тыкать палочкой клиента в текущей парадигме. Твоя хотелка довольно сложна в реализации.
25 fisher
 
16.06.21
15:49
(24) Да блин! ДлительныеОперации из БСП УЖЕ реализуют асинхронный сценарий выполнения с клиента фоновой серверной операции. Но реализуют в старом стиле - через оповещения.
И на текущий момент переписать это на промисы аналогично новым системным функциям - шансов никаких. А было бы круто. Вот я о чем, если кто не понял.
26 Garykom
 
гуру
16.06.21
15:49
(0) Захотел

Переходи с 1С
27 Cyberhawk
 
16.06.21
15:50
(25) Не через оповещения, а через обработчик ожидания же
28 fisher
 
16.06.21
15:53
(27) Обработчик ожидания - это механизм опроса сервера. А человеческий возврат результата выполнения при завершении работы фонового делается через оповещение.
То есть я сейчас могу сделать так:
ВыполнитьФоново(ПутьФункции, ПараметрыФункции, ОбработчикРезультата);
А хотелось бы так:
Результат = Ждать ВыполнитьФоново(ПутьФункции, ПараметрыФункции);
29 Cyberhawk
 
16.06.21
15:54
(28) А, понял. Я думал ты от обработчика ожидания хотел сразу тоже избавиться :)
30 polosov
 
16.06.21
15:55
(28) Гений 1С, перелогинься.
31 fisher
 
16.06.21
16:04
(29) Как один из вариантов решения сабжа. Была бы асинхронная пауза на клиенте по аналогии с обработчиком ожидания, но с возвратом управления в точку вызова - и проблема была бы решена.
Неужели сложно было добавить ПаузаАсинх(ВремяПаузы)?
32 H A D G E H O G s
 
16.06.21
16:09
Автор несет какую-то дичь, это меня разочаровывает.
33 H A D G E H O G s
 
16.06.21
16:10
МенеджерФоновыхЗаданий (BackgroundJobsManager)
ОжидатьЗавершенияВыполнения (WaitForExecutionCompletion)
Синтаксис:
ОжидатьЗавершенияВыполнения(<ФоновыеЗадания>, <Таймаут>)
34 Garykom
 
гуру
16.06.21
16:12
(32)(33) Ты же понимаешь что фоновые и асинхронное выполнение это как процедуры и функции

Хотя можно обойтись просто функциями без процедур
35 fisher
 
16.06.21
16:12
(33) У тебя ко мне какие-то завышенные ожидания. Вечно я тебя разочаровываю. Я вот от тебя ничего особенного не жду, поэтому никаких разочарований :)
С точки зрения клиента - это будет синхронная операция.
36 Garykom
 
гуру
16.06.21
16:13
(34)+ Лишнее усложнение и дублирование
37 H A D G E H O G s
 
16.06.21
16:14
(35) Асинхронная пауза на клиенте - это либо многопоточность, либо ТаблицаМестПауз, спасибо, такого счастья не надо.
38 H A D G E H O G s
 
16.06.21
16:18
(37) А таблица мест пауз - это все тот же обработчикоповещения, только на платформе.
Это все тот же
GetMessage/TranslateMessage/DispatchMessage

и никуда от него не деться.
39 ДедМорроз
 
16.06.21
16:18
Нет,разговор о том,что хочется чего-то подождать какое-то время,и если это не случилось,то продолжить делать что-то другое.
То есть,просто аналог SleepEx из Windows API,когда асинхронная процедура завершения сработает.
40 fisher
 
16.06.21
16:19
(37) А мне что-то подсказывает, что это будет реализовано. И все скажут - счастье наступило! Только HADGEHOGs его не выдавайте. Ему не надо.
41 ДедМорроз
 
16.06.21
16:22
В древнем как мамонты Visual Basic была незаменимая функция DoEvents.
Смысл ее в том,что оповещения,промисы,события и прочую фигню можно выполнить,не выходя из основного кода.
42 polosov
 
16.06.21
16:38
DoEvents() = ОбработкаПрерыванияПользователя()
43 ДедМорроз
 
16.06.21
17:11
Нет.
Обработка прерывания,это чтобы прервали.
А doevents позволяло запустить в excel расчет и пока он выполняется,работать с формой.
44 polosov
 
16.06.21
17:29
(43) Ты эта... теплое с мягким не путай.
Приложение на VB это чисто клиентское приложение. 1С работает по клиент-серверной архитектуре.
На VB по DoEvents() твой код просто прерывается, давая возможность event loop'у формы обработать очередь событий.
В 1С код может выполняться на неизвестной тебе машине.
45 Почему 1С
 
16.06.21
17:44
(32) Тоесть 1С-ные асинх функции это дичь? Или дичь если реализация таких функций будет реализована в платформе для обычных функций?
Это ты нас разочаровываешь...
46 ДедМорроз
 
16.06.21
17:46
Я то как раз не путаю.
Вся фигня с оповещениями и обещаниями работает на клиенте.
И,когда мы фоновое запустили на сервере,то оно нам ничего сообщить не может,мы только можем на сервер заглядывать и спрашивать,а не готово ли,и вот в цикле этого опроса хотелось бы иметь возможность что-то обрабатывать,не прибегая к обработке ожидания.
47 israel
 
16.06.21
17:59
(0) это 1с, страдай
48 fisher
 
16.06.21
18:04
Я тут МП ваяю и заморочился с написанием легкого аналога "ДлительныхОпераций" БСП. Получилось симпатично и ничего лишнего.

Процедура ВыполнитьФункциюОтображаяПрогрессВыполнения(ПутьФункции, ПараметрыФункции, ОповещениеОбработкиРезультата, ЗаголовокФормыПрогресса = Неопределено, ВладелецФормыПрогресса = Неопределено)

Любую функцию экспортную ему даешь - автоматом отображается "крутилка" и вывод сообщений из функции.
Результат функции прилетает соответственно в ОповещениеОбработкиРезультата со статусом завершения фонового и описанием исключения, если оно было.
Если кому надо - выберу время и опубликую.
49 polosov
 
16.06.21
18:05
(46)  ОбработкаОжидания - это улучшенная версия DoEvents()
50 ДедМорроз
 
17.06.21
01:09
Наоборот,ухудшенная.
Поток нужно прерывать и со стеком что-то делать вместо того,чтобы отдать эти проблемы движку.