Skip to content

Возможность отмены/прерывания фонового задания (ФоновоеЗадание.ОтменитьЗадание/Прервать) #1672

@nixel2007

Description

@nixel2007

Запрос

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

Текущее состояние

Класс ФоновоеЗадание (src/OneScript.StandardLibrary/Tasks/BackgroundTask.cs) сейчас имеет только метод ОжидатьЗавершения(timeout), который позволяет перестать ждать, но не прерывает фактическое выполнение. Зависший callback продолжит работу до завершения процесса, потенциально утекая память и ресурсы.

В 1С:Предприятии у ФоновоеЗадание есть Прервать() и ОтменитьЗадание() — было бы полезно иметь паритет (хотя бы soft-cancel через флаг отмены).

Кейс использования

Реализуем OpenTelemetry SDK на OneScript (nixel2007/opentelemetry). Спецификация Metrics SDK требует:

The implementation SHOULD use a timeout to prevent indefinite callback execution.

Сейчас можно сделать только soft-timeout: запустить callback в ФоновыеЗадания.Выполнить, через ОжидатьЗавершения(таймаут) перестать ждать, а измерения отбросить. Зомби-задание остаётся в фоне до конца процесса.

Предложение

Один из вариантов:

  1. Hard cancelПрервать(), аналог Thread.Abort (deprecated в .NET, не очень рекомендуется).
  2. Cooperative cancelОтменитьЗадание() ставит CancellationToken, который пользовательский код может проверять через ФоновыеЗадания.ПолучитьТекущее().Отменено(). Под капотом — CancellationTokenSource.

Cooperative cancel предпочтительнее: совпадает с .NET-практикой, не убивает поток, безопасно. Можно реализовать через свойство Отменено и метод ОтменитьЗадание() у BackgroundTask, прокидывая CancellationToken в внутренний Task.

Workaround

Пока используем soft-timeout с явной документацией платформенного ограничения. Ссылка на этот issue: TBD

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions