Back to questions
Okko
Яндекс Маркет
Локобанк
Junior — Middle
73
Можно ли прервать выполнение задачи, запущенной через GCD в iOS или macOS?
Companies where asked
О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
Таким образом, прерывание возможно только при условии, что задача сама поддерживает такую логику.