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