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()
Таким образом, отмена возможна только если задача поддерживает проверку отмены, иначе прервать её принудительно нельзя.