Junior — Middle
É possível interromper a execução de uma tarefa no GCD antes de ela terminar?
sobes.tech IA
Resposta da IA
No GCD (Grand Central Dispatch), não é possível interromper diretamente a execução de uma tarefa que já foi iniciada. As tarefas enviadas para a fila são executadas até serem concluídas.
No entanto, é possível implementar o cancelamento de uma tarefa de forma indireta:
- Para tarefas assíncronas, usar DispatchWorkItem, que suporta o método cancel(). A própria tarefa deve verificar periodicamente a propriedade isCancelled e terminar corretamente se o cancelamento for solicitado.
Exemplo:
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Tarefa cancelada")
return
}
// Executar trabalho
}
}
DispatchQueue.global().async(execute: workItem)
// Mais tarde
workItem.cancel()
Assim, o cancelamento só é possível se a tarefa suportar a verificação de cancelamento, caso contrário, não é possível interrompê-la forçadamente.