Junior — Middle
Je možné prerušiť vykonávanie úlohy v GCD pred jej dokončením?
sobes.tech AI
Odpoveď od AI
V GCD (Grand Central Dispatch) nie je možné priamo prerušiť už spustenú úlohu. Úlohy odoslané do frontu sa vykonávajú až do dokončenia.
Avšak, je možné implementovať jej zrušenie nepriamo:
- Pre asynchrónne úlohy použite DispatchWorkItem, ktorý podporuje metódu cancel(). Samotná úloha by mala pravidelne kontrolovať vlastnosť isCancelled a správne ukončiť, ak je požadované zrušenie.
Príklad:
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Úloha zrušená")
return
}
// Vykonanie práce
}
}
DispatchQueue.global().async(execute: workItem)
// Neskôr
workItem.cancel()
Týmto spôsobom je možné zrušenie iba v prípade, že úloha podporuje kontrolu zrušenia, inak ju nemožno nútene prerušiť.