Возможно ли прервать выполнение задачи, запущенной через GCD, в процессе её выполнения?

В GCD (Grand Central Dispatch) нет встроенного механизма для принудительной остановки задачи, которая уже запущена. После того, как задача (блок) начал выполняться, её нельзя прервать извне.

Короткий ответ

Что ответить на собеседовании

В GCD (Grand Central Dispatch) нет встроенного механизма для принудительной остановки задачи, которая уже запущена. После того, как задача (блок) начал выполняться, её нельзя прервать извне.

Подробный разбор

Ответ с пояснениями

В GCD (Grand Central Dispatch) нет встроенного механизма для принудительной остановки задачи, которая уже запущена. После того, как задача (блок) начал выполняться, её нельзя прервать извне.

Чтобы реализовать возможность прерывания, нужно самостоятельно предусмотреть проверку флага отмены внутри самой задачи. Например, использовать атомарную переменную или флаг, который периодически проверяется в ходе выполнения задачи, и при необходимости досрочно завершать работу.

Пример:

var isCancelled = false

dispatchQueue.async {
    for i in 0..<1000 {
        if isCancelled {
            print("Задача отменена")
            break
        }
        // Выполнение части работы
    }
}

// В другом месте
isCancelled = true

Если нужна более гибкая отмена, стоит рассмотреть использование Operation и OperationQueue, где есть встроенная поддержка отмены операций.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее