Sobes.tech
Junior — Middle

Como é que se pode interromper a execução de uma operação assíncrona?

sobes.tech IA

Resposta da IA

No iOS, geralmente usam-se as seguintes abordagens para interromper uma operação assíncrona:

  1. Cancelar tarefa do URLSession — se a operação assíncrona estiver relacionada com uma requisição de rede, pode-se chamar o método cancel() no objeto URLSessionTask.

  2. Uso de DispatchWorkItem — ao trabalhar com GCD, pode criar um DispatchWorkItem e chamar cancel() para tentar interromper a sua execução.

  3. Combine e Swift Concurrency — no Combine, pode cancelar a subscrição (AnyCancellable), e no Swift Concurrency (async/await), usar Task e chamar cancel().

Exemplo usando Task em Swift Concurrency:

let task = Task {
    for i in 1...10 {
        try Task.checkCancellation() // Verificação de cancelamento
        print(i)
        try await Task.sleep(nanoseconds: 1_000_000_000)
    }
}

// Mais tarde, para cancelar:
task.cancel()

É importante que dentro da operação assíncrona seja implementada uma verificação de cancelamento, caso contrário, a operação continuará a ser executada.