Ожидает завершения всех фоновых заданий из списка. Если хотя бы у одного задания изменился статус или время ожидания истекло, то возвращается обновленный список фоновых заданий. Ожидать завершения заданий может только администратор или пользователь, запустивший задания на выполнение.
Синтаксис
ОжидатьЗавершенияВыполнения(<ФоновыеЗадания>, <Таймаут>)Полное описание, параметры и ограничения
МенеджерФоновыхЗаданий.ОжидатьЗавершенияВыполнения (BackgroundJobsManager.WaitForExecutionCompletion)
МенеджерФоновыхЗаданий (BackgroundJobsManager)
ОжидатьЗавершенияВыполнения (WaitForExecutionCompletion)
Доступен, начиная с версии 8.3.13.
Синтаксис:
ОжидатьЗавершенияВыполнения(<ФоновыеЗадания>, <Таймаут>)
Параметры:
<ФоновыеЗадания> (обязательный)
Тип: Массив.
Массив фоновых заданий, завершение которых требуется ожидать.
<Таймаут> (необязательный)
Тип: Число.
Таймаут в секундах ожидания завершения заданий. Если таймаут не задан, ожидание будет длиться до завершения всех заданий, или до первого аварийного завершения задания.
Возвращаемое значение:
Тип: Массив.
Возвращает массив обновленных фоновых заданий по истечении таймаута:
Если в переданном массиве нет заданий со статусом Активно, возвращает список переданных фоновых заданий.
Если в переданном массиве есть задания со статусом Активно, по после первого изменения статуса любого из переданных фоновых заданий или после истечения таймаута возвращает обновленный список фоновых заданий.
Описание:
Ожидает завершения всех фоновых заданий из списка. Если хотя бы у одного задания изменился статус или время ожидания истекло, то возвращается обновленный список фоновых заданий.
Ожидать завершения заданий может только администратор или пользователь, запустивший задания на выполнение.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.13.
Методическая информация
Практические примеры
Запустить две собственные задачи и правильно ожидать массив
Считаем 1 × 250 и 3 × 250 отдельными заданиями. Ожидание менеджера может закончиться при изменении статуса только одного из них.
Где и как запускать
Полный серверный неглобальный общий модуль УчебныеФоновыеЗадачи отдельной собственной учебной конфигурации.
Подготовка
Создайте отдельную собственную учебную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую базу или копию с включёнными заданиями обмена, рассылки и обработчиками бизнес-данных.
Создайте неглобальный общий модуль УчебныеФоновыеЗадачи: Сервер = Истина, Глобальный = Ложь, Привилегированный = Ложь. Вставьте полный модуль одного урока; имя модуля используется в строке запуска.
ВыполнитьПример() вызывайте из серверного обработчика своей учебной команды обычного сеанса 1С. Не запускайте из COM/внешнего соединения с файловой базой или из другого фонового задания файловой базы.
Нужны права запуска собственных фоновых заданий. Не включайте привилегированный режим для обхода отказа. Передаются только сериализуемые числа и строка режима.
Задание считает собственные числа в памяти и публикует СообщениеПользователю. Документы, регистры, файлы, интернет и настройки пользователей не меняются. История собственных заданий остаётся в базе по правилам платформы.
Выполнить возвращает объект задания, а не результат вычисления. Трёхсекундный таймаут ограничивает одно ожидание; он не отменяет задание и не доказывает успешное завершение.
Процедура Рассчитать(Количество, Цена, Режим) Экспорт
Если Количество < 0 Или Количество > 1000000 Или Количество <> Цел(Количество) Тогда
ВызватьИсключение "guide-owned: количество должно быть целым от 0 до 1000000";
КонецЕсли;
Если Цена < 0 Тогда
ВызватьИсключение "guide-owned: цена не может быть отрицательной";
КонецЕсли;
Если Режим = "Книга" Тогда
Сумма = Количество * Цена;
ИначеЕсли Режим = "Пакет" Тогда
Сумма = 0;
Для Номер = 1 По Количество Цикл
Сумма = Сумма + Цена;
КонецЦикла;
Иначе
ВызватьИсключение "guide-owned: неизвестный режим";
КонецЕсли;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "guide-owned: сумма " + Формат(Сумма, "ЧГ=0");
Сообщение.Сообщить();
КонецПроцедуры
Процедура ВыполнитьПример() Экспорт
Свои = Новый Массив;
Количества = Новый Массив;
Количества.Добавить(1);
Количества.Добавить(3);
Для Каждого Количество Из Количества Цикл
Параметры = Новый Массив;
Параметры.Добавить(Количество);
Параметры.Добавить(250);
Параметры.Добавить("Книга");
Ключ = "guide-owned-" + Строка(Новый УникальныйИдентификатор);
Свои.Добавить(ФоновыеЗадания.Выполнить("УчебныеФоновыеЗадачи.Рассчитать", Параметры, Ключ, "guide-owned: собственный пакет"));
КонецЦикла;
Обновлённые = ФоновыеЗадания.ОжидатьЗавершенияВыполнения(Свои, 3);
Сообщить(Обновлённые.Количество() = 2);
Для Каждого Задание Из Обновлённые Цикл
Задание = Задание.ОжидатьЗавершенияВыполнения(3);
Отбор = Новый Структура("УникальныйИдентификатор", Задание.УникальныйИдентификатор);
Найденные = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Сообщить(Найденные.Количество() = 1);
Сообщить("Собственный UUID: " + Строка(Задание.УникальныйИдентификатор));
Сообщить("Состояние: " + Строка(Задание.Состояние));
Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
Для Каждого Сообщение Из Задание.ПолучитьСообщенияПользователю(Ложь) Цикл
Сообщить(Сообщение.Текст);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедурыРазбор по шагам
Создать две собственные задачи с разными UUID-ключами и сохранить только возвращённые объекты в массив.
Передать этот массив менеджеру ожидания. Получить обновлённый массив, не предполагая, что оба задания уже завершены.
Каждое своё задание обновить отдельным ограниченным ожиданием и запросить список с точным отбором по его UUID.
Печатать сообщение суммы только при Завершено. В файловой базе задачи могут выполняться последовательно, а не параллельно.
Как проверить результат
В обновлённом массиве две собственные задачи; точный отбор по UUID находит одну запись, если она ещё доступна в истории.
У успешно завершённых задач сообщения с суммами 250 и 750. Порядок завершения не закреплён; Активно после таймаута допустимо.
Ожидаемый результат
Собственный массив отделён от списка всех фоновых задач базы; ожидание любого изменения не перепутано с гарантией завершения всех.
На что обратить внимание
Таймаут 3 задан отдельно для менеджера и каждого объекта: суммарное время команды может быть больше трёх секунд.
Ожидание менеджера возвращается после первого изменения статуса; нельзя без проверки объявлять весь пакет успешным.
Здесь нет автоматического повтора, отмены остальных задач или удаления истории.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.