Junior — Middle
È possibile interrompere l'esecuzione di un compito in GCD prima del suo completamento?
sobes.tech AI
Risposta dell'AI
In GCD (Grand Central Dispatch), non è possibile interrompere direttamente l'esecuzione di un task già avviato. I task inviati in coda vengono eseguiti fino al completamento.
Tuttavia, è possibile implementare l'annullamento di un task in modo indiretto:
- Per i task asincroni, utilizzare DispatchWorkItem, che supporta il metodo cancel(). Il task stesso deve verificare periodicamente la proprietà isCancelled e terminare correttamente se viene richiesta l'annullamento.
Esempio:
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Task annullato")
return
}
// Eseguire il lavoro
}
}
DispatchQueue.global().async(execute: workItem)
// Più tardi
workItem.cancel()
Pertanto, l'annullamento è possibile solo se il task supporta il controllo di cancellazione, altrimenti non può essere interrotto forzatamente.