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