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

А что, собственные асинхронные функции писать не получится?

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

       Попытка

           Функ1(); 

       Исключение

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


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

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

 

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

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

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

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

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

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

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

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

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


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