Junior — Middle
Може ли да се прекъсне изпълнението на задача в GCD преди нейното завършване?
sobes.tech AI
Отговор от 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()
Така, отменянето е възможно само ако задачата поддържа проверка за отмена, иначе не може да бъде принудително прекъсната.