Skip to content

Commit 69f0c60

Browse files
Copilotnixel2007
andcommitted
Implement background task cleanup using ФоновыеЗадания singleton
Co-authored-by: nixel2007 <[email protected]>
1 parent ce6f1cf commit 69f0c60

File tree

1 file changed

+40
-3
lines changed

1 file changed

+40
-3
lines changed

src/Классы/ПулСоединений.os

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,48 @@
131131
Карта_КоннекторНаКонтекст.Очистить();
132132
КонецПроцедуры
133133

134-
// Очистить завершенные контексты (заглушка для будущего расширения)
134+
// Очистить завершенные контексты
135+
// Проверяет статус фоновых заданий и освобождает соединения завершенных контекстов
135136
//
136137
Процедура ОчиститьЗавершенныеКонтексты()
137-
// TODO: Реализовать проверку завершенных потоков/задач
138-
// Пока оставляем пустой метод для совместимости
138+
Попытка
139+
// Проверяем наличие менеджера фоновых заданий
140+
Если ТипЗнч(ФоновыеЗадания) = Тип("МенеджерФоновыхЗаданий") Тогда
141+
142+
// Получаем список активных фоновых заданий
143+
АктивныеЗадания = ФоновыеЗадания.ПолучитьЗадания();
144+
ИдентификаторыАктивныхЗаданий = Новый Соответствие;
145+
146+
Для Каждого Задание Из АктивныеЗадания Цикл
147+
ИдентификаторыАктивныхЗаданий[Строка(Задание.УникальныйИдентификатор)] = Истина;
148+
КонецЦикла;
149+
150+
// Проверяем контексты и освобождаем соединения завершенных заданий
151+
КонтекстыДляУдаления = Новый Массив;
152+
153+
Для Каждого Элемент Из Карта_КонтекстНаКоннектор Цикл
154+
КонтекстID = Элемент.Ключ;
155+
156+
// Если контекст выглядит как идентификатор задания и задание завершилось
157+
Если СтрДлина(КонтекстID) = 36 И СтрНайти(КонтекстID, "-") > 0 Тогда
158+
Если ИдентификаторыАктивныхЗаданий.Получить(КонтекстID) = Неопределено Тогда
159+
// Задание завершилось, добавляем контекст в список для удаления
160+
КонтекстыДляУдаления.Добавить(КонтекстID);
161+
КонецЕсли;
162+
КонецЕсли;
163+
КонецЦикла;
164+
165+
// Освобождаем соединения завершенных контекстов
166+
Для Каждого КонтекстID Из КонтекстыДляУдаления Цикл
167+
ОсвободитьКонтекст(КонтекстID);
168+
КонецЦикла;
169+
170+
КонецЕсли;
171+
172+
Исключение
173+
// Если возникла ошибка при работе с менеджером фоновых заданий,
174+
// продолжаем работу без очистки завершенных контекстов
175+
КонецПопытки;
139176
КонецПроцедуры
140177

141178
// Создать новое соединение

0 commit comments

Comments
 (0)