Sobes.tech
Junior

Qual é a diferença entre pedidos síncronos e assíncronos?

sobes.tech IA

Resposta da IA

Requisições síncronas bloqueiam o thread de execução atual até receber uma resposta. Requisições assíncronas não bloqueiam o thread; a resposta é processada ao concluir a operação, geralmente através de um mecanismo de callback, delegado ou encerramento.

Característica Requisição síncrona Requisição assíncrona
Bloqueio do thread Sim Não
Reatividade da UI Pode bloquear a UI Não bloqueia a UI
Complexidade de implementação Mais simples Mais complexa (gestão de estado)
Uso em iOS Raro, apenas para tarefas curtas, não na thread principal Preferido, especialmente para operações longas

Exemplo de requisição assíncrona usando URLSession:

// Criar URLSessionTask
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    // Este bloco é executado de forma assíncrona após a conclusão da requisição
    if let error = error {
        print("Erro: \(error.localizedDescription)")
        return
    }

    // Processamento dos dados recebidos
    if let data = data {
        print("Dados recebidos, bytes: \(data.count)")
    }

    // A atualização da UI deve ocorrer na thread principal
    DispatchQueue.main.async {
        // Atualizar UI
    }
}

// Iniciar a tarefa
task.resume()

// O código aqui é executado imediatamente, sem esperar pela conclusão da requisição
print("Requisição enviada")