Не отрабатывает таймаут с ФоновыеЗадания.ОжидатьЗавершенияВыполнения

1. user798355 29.04.21 12:14 Сейчас в теме
Доброго времени суток.
Платформа 8.3 (8.3.17.1496)
Конфигурация Бухгалтерия предприятия, редакция 2.0 (2.0.66.140)

Не могу понять почему не отрабатывает таймаут в функции ФоновыеЗадания.ОжидатьЗавершенияВыполнения

ОжидатьЗавершенияВыполнения (WaitForExecutionCompletion)
Доступен, начиная с версии 8.3.13.
Синтаксис:
ОжидатьЗавершенияВыполнения(<ФоновыеЗадания>, <Таймаут>)
Параметры:
<ФоновыеЗадания> (обязательный)
Тип: Массив.
Массив фоновых заданий, завершение которых требуется ожидать.
<Таймаут> (необязательный)
Тип: Число.
Таймаут в секундах ожидания завершения заданий. Если таймаут не задан, ожидание будет длиться до завершения всех заданий, или до первого аварийного завершения задания.

Процедура ВыгрузкаPBI_ЗапускЗаданийФоново(МассивПараметров, ВремяОжиданияСек) Экспорт
	МассивЗапущенныхЗаданий = Новый Массив;
	МассивЗапущенныхЗаданий.Добавить(ФоновыеЗадания.Выполнить("DIS_ФоновыеЗадания.ВыгрузкаPBI_OLAP_FP", МассивПараметров, , "ВыгрузкаPBI_OLAP_FP"));
	МассивЗапущенныхЗаданий.Добавить(ФоновыеЗадания.Выполнить("DIS_ФоновыеЗадания.ВыгрузкаPBI_KoefTip", МассивПараметров, , "ВыгрузкаPBI_KoefTip"));
		
	ТаймаутСек = 10;
	ЗаданияВыполняются = истина;
	Пока ЗаданияВыполняются и ВремяОжиданияСек >= 0 цикл
		ЗаданияВыполняются = Ложь;
		СостоянияФоновыхЗаданий = ФоновыеЗадания.ОжидатьЗавершенияВыполнения(МассивЗапущенныхЗаданий, ТаймаутСек);
		ВремяОжиданияСек = ВремяОжиданияСек - ТаймаутСек;
		Сообщить(Строка(ТекущаяДата()) + " осталось времени ожидания " + ВремяОжиданияСек + " сек.");
		Для Каждого ФоновоеЗадание Из СостоянияФоновыхЗаданий Цикл
      		Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
          		ЗаданияВыполняются = истина;
				Прервать; //Нашли хоть 1 активный, ждем дальше
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
КонецПроцедуры
Показать

Таймаут = 10 сек, ВремяОжиданияСек = 600 сек, но весь цикл выполняется в течение 1 сек, хотя должен 10 мин.
29.04.2021 11:44:02 осталось времени ожидания 590 сек.
29.04.2021 11:44:02 осталось времени ожидания 580 сек.
29.04.2021 11:44:02 осталось времени ожидания 570 сек.
29.04.2021 11:44:02 осталось времени ожидания 560 сек.
29.04.2021 11:44:02 осталось времени ожидания 550 сек.
29.04.2021 11:44:02 осталось времени ожидания 540 сек.
29.04.2021 11:44:02 осталось времени ожидания 530 сек.
29.04.2021 11:44:02 осталось времени ожидания 520 сек.
29.04.2021 11:44:02 осталось времени ожидания 510 сек.
29.04.2021 11:44:02 осталось времени ожидания 500 сек.
29.04.2021 11:44:02 осталось времени ожидания 490 сек.
29.04.2021 11:44:02 осталось времени ожидания 480 сек.
29.04.2021 11:44:02 осталось времени ожидания 470 сек.
29.04.2021 11:44:02 осталось времени ожидания 460 сек.
29.04.2021 11:44:02 осталось времени ожидания 450 сек.
29.04.2021 11:44:02 осталось времени ожидания 440 сек.
29.04.2021 11:44:02 осталось времени ожидания 430 сек.
29.04.2021 11:44:02 осталось времени ожидания 420 сек.
29.04.2021 11:44:02 осталось времени ожидания 410 сек.
29.04.2021 11:44:02 осталось времени ожидания 400 сек.
29.04.2021 11:44:02 осталось времени ожидания 390 сек.
29.04.2021 11:44:02 осталось времени ожидания 380 сек.
29.04.2021 11:44:02 осталось времени ожидания 370 сек.
29.04.2021 11:44:02 осталось времени ожидания 360 сек.
29.04.2021 11:44:02 осталось времени ожидания 350 сек.
29.04.2021 11:44:02 осталось времени ожидания 340 сек.
29.04.2021 11:44:02 осталось времени ожидания 330 сек.
29.04.2021 11:44:02 осталось времени ожидания 320 сек.
29.04.2021 11:44:02 осталось времени ожидания 310 сек.
29.04.2021 11:44:02 осталось времени ожидания 300 сек.
29.04.2021 11:44:02 осталось времени ожидания 290 сек.
29.04.2021 11:44:02 осталось времени ожидания 280 сек.
29.04.2021 11:44:02 осталось времени ожидания 270 сек.
29.04.2021 11:44:02 осталось времени ожидания 260 сек.
29.04.2021 11:44:02 осталось времени ожидания 250 сек.
29.04.2021 11:44:02 осталось времени ожидания 240 сек.
29.04.2021 11:44:02 осталось времени ожидания 230 сек.
29.04.2021 11:44:02 осталось времени ожидания 220 сек.
29.04.2021 11:44:02 осталось времени ожидания 210 сек.
29.04.2021 11:44:02 осталось времени ожидания 200 сек.
29.04.2021 11:44:02 осталось времени ожидания 190 сек.
29.04.2021 11:44:02 осталось времени ожидания 180 сек.
29.04.2021 11:44:02 осталось времени ожидания 170 сек.
29.04.2021 11:44:02 осталось времени ожидания 160 сек.
29.04.2021 11:44:02 осталось времени ожидания 150 сек.
29.04.2021 11:44:02 осталось времени ожидания 140 сек.
29.04.2021 11:44:02 осталось времени ожидания 130 сек.
29.04.2021 11:44:02 осталось времени ожидания 120 сек.
29.04.2021 11:44:02 осталось времени ожидания 110 сек.
29.04.2021 11:44:02 осталось времени ожидания 100 сек.
29.04.2021 11:44:02 осталось времени ожидания 90 сек.
29.04.2021 11:44:02 осталось времени ожидания 80 сек.
29.04.2021 11:44:02 осталось времени ожидания 70 сек.
29.04.2021 11:44:02 осталось времени ожидания 60 сек.
29.04.2021 11:44:02 осталось времени ожидания 50 сек.
29.04.2021 11:44:02 осталось времени ожидания 40 сек.
29.04.2021 11:44:02 осталось времени ожидания 30 сек.
29.04.2021 11:44:02 осталось времени ожидания 20 сек.
29.04.2021 11:44:02 осталось времени ожидания 10 сек.
29.04.2021 11:44:02 осталось времени ожидания 0 сек.
Показать
Найденные решения
2. user798355 29.04.21 12:47 Сейчас в теме
Вопрос снимается..
Если таймаут не задан, ожидание будет длиться до завершения всех заданий, или до первого аварийного завершения задания.

Это правило работает и если таймер задан, т.е. если в массиве заданий есть хоть одно не активное задание, задержку по таймеру игнорирует((
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user798355 29.04.21 12:47 Сейчас в теме
Вопрос снимается..
Если таймаут не задан, ожидание будет длиться до завершения всех заданий, или до первого аварийного завершения задания.

Это правило работает и если таймер задан, т.е. если в массиве заданий есть хоть одно не активное задание, задержку по таймеру игнорирует((
3. user798355 29.04.21 15:49 Сейчас в теме
Переделала цикл, добавила удаление неактивных заданий. Теперь таймаут отрабатывает и время выполнения уменьшилось в 2 раза.
Таймаут = 10;
	МаксВремяЗавершения = ТекущаяДата() + ВремяОжиданияСек;
	ЗаданияВыполняются = истина;
	Пока ЗаданияВыполняются и МаксВремяЗавершения >= ТекущаяДата() цикл
		ЗаданияВыполняются = Ложь;
		МассивЗапущенныхЗаданий = ФоновыеЗадания.ОжидатьЗавершенияВыполнения(МассивЗапущенныхЗаданий, Таймаут);
		КоличествоЗаданий = МассивЗапущенныхЗаданий.Количество();
		Для ОбратныйИндекс = 1 по КоличествоЗаданий цикл
			ТекИнд = КоличествоЗаданий - ОбратныйИндекс; 
			ФоновоеЗадание = МассивЗапущенныхЗаданий[ТекИнд];
			Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
          		ЗаданияВыполняются = истина;
			Иначе
				МассивЗапущенныхЗаданий.Удалить(ТекИнд);
			КонецЕсли;
		КонецЦикла;	
	КонецЦикла;
Показать
user1050439; mifka186; +2 Ответить
4. shur52 09.11.22 12:35 Сейчас в теме
Добрый день!

Видимо, этот момент исправили. В платформе 8.3.20.1674 поток, вызвавший ФоновыеЗадания.ОжидатьЗавершенияВыполнения() - возобновляется при завершении хотя бы одного из фоновых заданий. И не важно, успешно оно завершилось или аварийно.
5. rozer 307 03.03.23 13:02 Сейчас в теме
(4)
Видимо, этот момент исправили.


это так с 8.13 и было

Ожидает завершения всех фоновых заданий из списка. Если хотя бы у одного задания изменился статус или время ожидания истекло, то возвращается обновленный список фоновых заданий.




ОжидатьЗавершенияВыполнения (WaitForExecutionCompletion)
Синтаксис:
ОжидатьЗавершенияВыполнения(<ФоновыеЗадания>, <Таймаут>)
Параметры:
<ФоновыеЗадания> (обязательный)
Тип: Массив.
Массив фоновых заданий, завершение которых требуется ожидать.
<Таймаут> (необязательный)
Тип: Число.
Таймаут в секундах ожидания завершения заданий. Если таймаут не задан, ожидание будет длиться до завершения всех заданий, или до первого аварийного завершения задания.
Возвращаемое значение:
Тип: Массив.
Возвращает массив обновленных фоновых заданий по истечении таймаута:
Если в переданном массиве нет заданий со статусом Активно, возвращает список переданных фоновых заданий.
Если в переданном массиве есть задания со статусом Активно, по после первого изменения статуса любого из переданных фоновых заданий или после истечения таймаута возвращает обновленный список фоновых заданий.
Описание:
Ожидает завершения всех фоновых заданий из списка. Если хотя бы у одного задания изменился статус или время ожидания истекло, то возвращается обновленный список фоновых заданий.
Ожидать завершения заданий может только администратор или пользователь, запустивший задания на выполнение.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.13.
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот