|
А что, собственные асинхронные функции писать не получится? | ☑ | ||
---|---|---|---|---|
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
|
Наоборот,ухудшенная.
Поток нужно прерывать и со стеком что-то делать вместо того,чтобы отдать эти проблемы движку. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |