Sobes.tech
Back to questions
Junior — Middle
75

Можно ли прервать выполнение задачи в GCD до её завершения?

Companies where asked
Itexus

Answer from AI

sobes.tech AI

В GCD (Grand Central Dispatch) нельзя напрямую прервать выполнение задачи, которая уже запущена. Задачи, отправленные в очередь, выполняются до завершения.

Однако можно реализовать отмену задачи косвенно:

  • Для асинхронных задач использовать DispatchWorkItem, который поддерживает метод cancel(). При этом сама задача должна периодически проверять свойство isCancelled и корректно завершаться, если отмена запрошена.

Пример:

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

DispatchQueue.global().async(execute: workItem)

// Позже
workItem.cancel()

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