Sobes.tech
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.