Skip to main content

FuncTask

FuncTask выполняет любую функцию, пока очередь показывает статус «в работе». Задача полезна для операций без пользовательского ввода: загрузка данных, проверка подключений, подготовка окружения.

Создание

Функция должна возвращать error. Любая ошибка отображается в интерфейсе и может остановить очередь.

Опции конфигурации

WithStopOnError

Если функция вернёт ошибку, очередь остановится и Run() завершится с этой ошибкой.

WithSummaryFunction

Сводка выводится сразу под заголовком задачи после успешного выполнения.

Управление меткой завершения

По умолчанию FuncTask выводит статус «ГОТОВО» справа от заголовка.
Чтобы полностью скрыть статус, используйте метод WithoutSuccessLabel():
Эквивалентную настройку можно передать через опции конструктора:
Позже статус можно снова включить вызовом WithSuccessLabelEnabled(true) или установить новую подпись через WithSuccessLabel(...).

Комбинирование с другими задачами

Если пользователь выберет «Нет», FuncTask всё равно выполнится, но будет помечен как отклонённый (см. YesNoTask).

Рекомендации

  • Не блокируйте рендеринг. Если функция выполняется долго и может предоставить прогресс, обновляйте состояние через внешние каналы либо используйте несколько последовательных FuncTask.
  • Комбинируйте с таймерами. Для долгих операций добавьте time.Sleep или прогресс-бары внутри функции, если это оправдано.
  • Не выводите в stdout. Пусть очередь управляет экраном. Для логирования используйте файлы или отдельный канал вывода.
  • Используйте горутины осторожно. FuncTask вызывается внутри основного цикла. Если запускаете горутину, синхронизируйте её завершение внутри функции, иначе очередь перейдёт к следующей задаче преждевременно.

Связанные материалы

  • Queue — управление последовательностью задач
  • YesNoTask — удобно запускать FuncTask по подтверждению