Junior — Middle
Da li je moguće prekinuti izvršenje zadatka u GCD pre njegovog završetka?
sobes.tech АИ
Одговор од АИ
У 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()
Дакле, отказ је могућ само ако задатак подржава проверу отказа, у супротном га не може принудно прекинути.