Junior — Middle
Lze přerušit provádění úkolu v GCD před jeho dokončením?
sobes.tech AI
Odpověď od AI
V GCD (Grand Central Dispatch) nelze přímo přerušit již spuštěný úkol. Úkoly odeslané do fronty se vykonávají až do dokončení.
Nicméně, lze implementovat jeho zrušení nepřímo:
- Pro asynchronní úkoly použijte DispatchWorkItem, který podporuje metodu cancel(). Samotný úkol by měl pravidelně kontrolovat vlastnost isCancelled a správně ukončit, pokud je požadováno zrušení.
Příklad:
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Úkol zrušen")
return
}
// Provádění práce
}
}
DispatchQueue.global().async(execute: workItem)
// Později
workItem.cancel()
Tímto způsobem je možné zrušení pouze v případě, že úkol podporuje kontrolu zrušení, jinak jej nelze násilně přerušit.