Junior — Middle
Je možné zrušit provádění úkolu při použití GCD v iOS?
sobes.tech AI
Odpověď od AI
V GCD (Grand Central Dispatch) na iOS není možné přímo zrušit úlohu, pokud již byla spuštěna. GCD nepodporuje vestavěný mechanismus pro přerušení právě běžícího bloku.
Nicméně, lze implementovat nepřímé zrušení:
- Použitím vlajek nebo proměnných stavu, které jsou kontrolovány uvnitř bloku úlohy a v případě potřeby předčasně ukončí vykonávání.
- Pro asynchronní operace použít DispatchWorkItem, který podporuje metodu cancel(). Zrušení přes DispatchWorkItem zabrání spuštění úlohy, pokud ještě nezačala.
Příklad s DispatchWorkItem:
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Úloha zrušena")
return
}
// Provádění práce
print(i)
}
}
DispatchQueue.global().async(execute: workItem)
// Zrušení úlohy
workItem.cancel()
Tímto způsobem je možné zrušit úlohu před jejím začátkem nebo uvnitř ní kontrolou vlajky, ale nelze přerušit již běžící blok v GCD.