Sobes.tech
Back to questions
Junior — Middle
73

Можно ли прервать выполнение задачи, запущенной через GCD в iOS или macOS?

Companies where asked
OkkoOkko
Яндекс МаркетЯндекс Маркет
О5.ru
ЛокобанкЛокобанк

Answer from AI

sobes.tech AI

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

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

Пример подхода с флагом:

var isCancelled = false

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

// Для отмены
isCancelled = true

Таким образом, прерывание возможно только при условии, что задача сама поддерживает такую логику.