Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Завершение фонового задания

Завершение фонового задания
Я
   Defender77
 
24.09.18 - 10:36
Всем привет, 
Можно как-то отследить аварийное завершение фонового задания, при запуске нескольких?
Запускаю 8 заданий, жду, пока завершатся функцией Ожидатьзавершения(списокЗаданий). когда одно из них сваливается с ошибкой, то программа падает в исключение, но остальные задания продолжают работать.
Сделал бесконечный цикл: но после первой ошибки программа больше не ждет, а сразу попадает в ветку Исключение.

Пробовал снять фоновое задание из консоли - падает в исключение а все задания с состоянием "Задание выполняется".

Это как-то можно победить?
 
 
   Волшебник
 
1 - 24.09.18 - 10:37
Убери бесконечный цикл
   Serg_1960
 
2 - 24.09.18 - 10:41
ОжидатьЗавершение(ОчередноеЗаданиеИзСпискаЗаданий)
   Defender77
 
3 - 24.09.18 - 10:47
(1) Тогда программа завершается - пользователь видит ошибку и может начать загрузку заново. Т.е. 7 тредов работают и еще восемь на помощь им )))
   Defender77
 
4 - 24.09.18 - 10:49
(2) м.. это как? Ждем пока завершится первое, потом ждем второе и т.д.? Кривовато как-то...
   DmitrO
 
5 - 24.09.18 - 10:54
В 8.3.13

Реализована возможность ожидать завершение работы одного или нескольких фоновых заданий в течение заданного промежутка времени. Реализован метод ОжидатьЗавершенияВыполнения() для объектов ФоновоеЗадание и МенеджерФоновыхЗаданий.
Метод ОжидатьЗавершения() считается устаревшим и не рекомендуется к использованию.

Рекомендуется выполнить анализ прикладного решения и изменить алгоритмы работы с фоновыми заданиями.

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

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

Диагностика аварийных ситуаций при ожидании завершения несуществующего фонового задания была некорректной.


Источник: http://downloads.v8.1c.ru/content//Platform/8_3_13_1513/1cv8upd_8_3_13_1513.htm#6e6da165-081e-11e8-a3f7-0050569f678a
   Defender77
 
6 - 24.09.18 - 10:56
(5) Нужно обновляться. Спасибо!
   DmitrO
 
7 - 24.09.18 - 10:57
(6)да, а пока вам "не предоставляется такая возможность" :)
   DmitrO
 
8 - 24.09.18 - 11:00
да не, а если обойти так:
почему бы из массива не убирать задания, на которых словили сиключения, цикл придется оставить.
   Defender77
 
9 - 24.09.18 - 11:07
(8) Так я и пишу: задания сами падают довольно редко. А когда удаляю через консоль, то все задания со статусом "Выполняется"
   DmitrO
 
10 - 24.09.18 - 11:20
(9)ну, это тогда совсем плохо, вероятно статус "скеширован" в объекте задания. И изменения из 13го релиза могут не решить именно эту проблему.
Предполагаю, что после удаления задания через консоль, надо объекты заданий, заново получить по идентификатору, возможно статус будет правильный.
 
 Рекламное место пустует
   Serg_1960
 
11 - 24.09.18 - 11:27
"Кривовато как-то..."(цы)

В ОжидатьЗавершения(ФоновыеЗадания) реализован метод "Всё или ничего". Что логично, если задания кто-то зачем-то :) "связал" друг с другом списком.

(10) Там для этого где-то есть кнопочка "Обновить".
   DmitrO
 
12 - 24.09.18 - 11:31
(11)не, я не имел в виду отображение в консоли, я (9) понял так, что программно серверный код показывает не тот статус у задания, после снятия из консоли.
   Serg_1960
 
13 - 24.09.18 - 11:39
Ааа... понял. Мне больше нравится ПолучитьФоновыеЗадания


(офф) Навеяло, 2008 год, ветка на тему "Давайте делать паузы в словах"(с) - три паузы по минутке каждая
Пока Повтор = 1 По 3 Цикл
   Попытка
      ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Наименование", "Моё первое задание"))[0].ОжидатьЗавершения(60);
   Исключение
   КонецПопытки;
КонецЦикла;
   Serg_1960
 
14 - 24.09.18 - 11:58
PS: у автора, имхо, бесконечное зацикливание не в алгоритме, а в голове :)
Ожидать можно завершения всех восьми заданий или сразу, или... всё равно ведь сидим, ждём, ничего не делая - можно ждать в цикле по списку, опрашивая задания по очереди. Чтобы скучно не было :)) Скуки ради, можно для разнообразия вычеркивать из списка уже завершённые. Просто напомню: в этих функциях есть параметр "Таймаут".
   Defender77
 
15 - 24.09.18 - 16:04
(14) У автора все отлично с зацикливанием ))) Таймаут тоже не сильно прокатывает - загрузка идет порядка 2-х часов

Взлетело в таком виде. нужно обновлять список заданий и тогда ОжидатьЗавершения() отрабатывает правильно.
УбитыеЗадания = Новый Массив;

Пока Истина Цикл
    Попытка
        ФоновыеЗадания.ОжидатьЗавершения(лМассивЗаданий);
        Прервать;
    Исключение
        Отказ = Истина;
        
        Для каждого сЗадание из лМассивЗаданий цикл
            _задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(сЗадание.УникальныйИдентификатор);
            
            Если _задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
                Сообщить("Ошибка завершения фонового задания "+_задание.ИнформацияОбОшибке.Описание+" "+_задание.ИнформацияОбОшибке.ИсходнаяСтрока);
                
                УбитыеЗадания.Добавить(_задание);
            КонецЕсли;
        КонецЦикла;    
            
        Для Каждого Стр из УбитыеЗадания Цикл
            
            к = лМассивЗаданий.Количество()-1;
            Пока к >= 0 Цикл
                сЗадание = лМассивЗаданий[к];
                Если Стр.УникальныйИдентификатор = сЗадание.УникальныйИдентификатор Тогда
                    лМассивЗаданий.Удалить(к);
                КонецЕсли;
                
                к = к - 1;
            КонецЦикла;
        КонецЦикла;
        
        Если лМассивЗаданий.Количество() = 0 Тогда
            Прервать;
        КонецЕсли;
        
    КонецПопытки;
КонецЦикла;
   Вафель
 
16 - 24.09.18 - 16:09
может на клиенте через обраотчик опрашивать статус?
   Волшебник
 
17 - 24.09.18 - 16:16
(3) Добавляй запись в регистр "Загрузки". При попытке загрузить повторно проверяй последние загрузки и предупреждай пользователя.
   Serg_1960
 
18 - 24.09.18 - 18:06
(15) Зачем бесконечный цикл, если у тебя уже есть удаление заданий из списка? Осталось добавить удаление выполненных заданий и можно крутить опрос заданий Пока лМассивЗаданий.Количество() Цикл.
   Defender77
 
19 - 24.09.18 - 21:25
(18) По-моему, крутить циклы с опросами моветон. А тут ожидаешь завершения - и вроде как весь в белом. Хз что там понаписали в 1С, пусть будет на их совести.

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