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:
-
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 objetoURLSessionTask. -
Uso de
DispatchWorkItem— ao trabalhar com GCD, pode criar umDispatchWorkIteme chamarcancel()para tentar interromper a sua execução. -
Combine e Swift Concurrency — no Combine, pode cancelar a subscrição (
AnyCancellable), e no Swift Concurrency (async/await), usarTaske chamarcancel().
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.