Junior — Middle
¿Se puede interrumpir la ejecución de una tarea en GCD antes de que finalice?
sobes.tech AI
Respuesta de la IA
En GCD (Grand Central Dispatch) no se puede interrumpir directamente la ejecución de una tarea que ya ha comenzado. Las tareas enviadas a la cola se ejecutan hasta completarse.
Sin embargo, se puede implementar la cancelación de una tarea de manera indirecta:
- Para tareas asíncronas, usar DispatchWorkItem, que soporta el método cancel(). La tarea en sí debe verificar periódicamente la propiedad isCancelled y finalizar correctamente si se solicita la cancelación.
Ejemplo:
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Tarea cancelada")
return
}
// Ejecutar trabajo
}
}
DispatchQueue.global().async(execute: workItem)
// Más tarde
workItem.cancel()
Por lo tanto, la cancelación solo es posible si la tarea soporta la verificación de cancelación, de lo contrario, no se puede interrumpir forzosamente.