Middle
Como cancelar a execução de tarefas síncronas no iOS?
sobes.tech IA
Resposta da IA
Não há uma cancelamento direta de tarefas síncronas (que bloqueiam o thread atual) sem interromper a execução do thread.
Para simular o cancelamento de uma tarefa síncrona, pode usar as seguintes abordagens:
-
Verificação regular de uma bandeira de cancelamento: Adicione na lógica da tarefa síncrona uma verificação de uma bandeira booleana, que é definida externamente quando é necessário cancelar. Se a bandeira estiver definida, a tarefa termina prematuramente.
var isCancelled = false func performSynchronousTask() { // Início da tarefa for i in 0..<100000 { if isCancelled { print("Tarefa cancelada") return // Saída antecipada } // Execução de parte do trabalho // ... cálculos longos ou operações } print("Tarefa concluída") } func cancelTask() { isCancelled = true } // Exemplo de uso // performSynchronousTask() // Chamada síncrona // cancelTask() // Chamar de outro thread para cancelar -
Uso de
try? Task.checkCancellation()em um contexto assíncrono: Se a tarefa síncrona for executada dentro deTaskem um contexto assíncrono do Swift Concurrency, pode chamá-la periodicamente. Se a tarefa for cancelada, essa chamada lançará umCancellationError.func performCancellableSynchronousWork() throws { for i in 0..<100000 { try Task.checkCancellation() // Verificação de cancelamento // Execução de parte do trabalho // ... } } // Exemplo de uso em um contexto assíncrono /* let task = Task { do { try performCancellableSynchronousWork() print("Tarefa concluída") } catch is CancellationError { print("Tarefa cancelada") } catch { print("Ocorreu um erro: \(error)") } } // Para cancelar a tarefa // task.cancel() */