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

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

Это как-то можно победить?
1 Волшебник
 
24.09.18
10:37
Убери бесконечный цикл
2 Serg_1960
 
24.09.18
10:41
ОжидатьЗавершение(ОчередноеЗаданиеИзСпискаЗаданий)
3 Defender77
 
24.09.18
10:47
(1) Тогда программа завершается - пользователь видит ошибку и может начать загрузку заново. Т.е. 7 тредов работают и еще восемь на помощь им )))
4 Defender77
 
24.09.18
10:49
(2) м.. это как? Ждем пока завершится первое, потом ждем второе и т.д.? Кривовато как-то...
5 DmitrO
 
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
6 Defender77
 
24.09.18
10:56
(5) Нужно обновляться. Спасибо!
7 DmitrO
 
24.09.18
10:57
(6)да, а пока вам "не предоставляется такая возможность" :)
8 DmitrO
 
24.09.18
11:00
да не, а если обойти так:
почему бы из массива не убирать задания, на которых словили сиключения, цикл придется оставить.
9 Defender77
 
24.09.18
11:07
(8) Так я и пишу: задания сами падают довольно редко. А когда удаляю через консоль, то все задания со статусом "Выполняется"
10 DmitrO
 
24.09.18
11:20
(9)ну, это тогда совсем плохо, вероятно статус "скеширован" в объекте задания. И изменения из 13го релиза могут не решить именно эту проблему.
Предполагаю, что после удаления задания через консоль, надо объекты заданий, заново получить по идентификатору, возможно статус будет правильный.
11 Serg_1960
 
24.09.18
11:27
"Кривовато как-то..."(цы)

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

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


(офф) Навеяло, 2008 год, ветка на тему "Давайте делать паузы в словах"(с) - три паузы по минутке каждая

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

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

УбитыеЗадания = Новый Массив;

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