Junior — Middle
Kas GCD-s ülesande täitmise katkestamine enne selle lõpetamist võimalik?
sobes.tech AI
Vastus AI-lt
GCD (Grand Central Dispatch) süsteemis ei ole võimalik otse katkestada juba käivitunud ülesannet. Tööde järjekorda saadetud ülesanded täidetakse kuni lõpuni.
Kuid, ülesande tühistamine on võimalik kaudselt:
- Asünkroonsete ülesannete jaoks kasutage DispatchWorkItem, mis toetab meetodit cancel(). Oma ülesanne peaks regulaarselt kontrollima isCancelled omadust ja õigesti lõpetama, kui tühistamine on nõutud.
Näide:
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Ülesanne tühistatud")
return
}
// Töö tegemine
}
}
DispatchQueue.global().async(execute: workItem)
// Hiljem
workItem.cancel()
Seega, tühistamine on võimalik ainult juhul, kui ülesanne toetab tühistamise kontrolli, vastasel juhul ei ole seda võimalik sunniviisiliselt katkestada.