Junior — Middle
É possível interromper a execução de uma tarefa iniciada através do GCD durante a sua execução?
sobes.tech IA
Resposta da IA
No GCD (Grand Central Dispatch) há um mecanismo incorporado para parar forçadamente uma tarefa que já está em execução. Depois que a tarefa (bloco) começa a ser executada, ela não pode ser interrompida de fora.
Para implementar a capacidade de cancelar, é necessário prever uma verificação de uma bandeira de cancelamento dentro da própria tarefa. Por exemplo, usar uma variável atômica ou uma bandeira que seja verificada periodicamente durante a execução da tarefa, e que permita terminar antecipadamente se necessário.
Exemplo:
var isCancelled = false
dispatchQueue.async {
for i in 0..<1000 {
if isCancelled {
print("Tarefa cancelada")
break
}
// Executar parte do trabalho
}
}
// Em outro lugar
isCancelled = true
Se for necessária uma cancelamento mais flexível, recomenda-se usar Operation e OperationQueue, que possuem suporte embutido para cancelar operações.