Sobes.tech
Junior — Middle

Como usar o DispatchGroup para executar solicitações sequencialmente com a capacidade de interromper na terceira sem esperar pela quarta?

sobes.tech IA

Resposta da IA

O DispatchGroup no iOS é normalmente usado para acompanhar a conclusão de várias tarefas assíncronas. No entanto, para executar pedidos sequencialmente com a possibilidade de interromper na terceira solicitação sem esperar pela quarta, pode usar a seguinte abordagem:

  1. Não iniciar todos os pedidos ao mesmo tempo, mas executá-los sequencialmente, aguardando a conclusão do anterior.
  2. Para cada pedido, usar DispatchGroup para acompanhar sua conclusão.
  3. Quando ocorrer uma condição de interrupção (por exemplo, erro na terceira solicitação), não iniciar o próximo pedido e sair da cadeia.

Exemplo em Swift:

let dispatchGroup = DispatchGroup()

func performRequestsSequentially() {
    dispatchGroup.enter()
    performRequest1 { success in
        dispatchGroup.leave()
        guard success else { return }

        dispatchGroup.enter()
        performRequest2 { success in
            dispatchGroup.leave()
            guard success else { return }

            dispatchGroup.enter()
            performRequest3 { success in
                dispatchGroup.leave()
                guard success else { return }

                // Se necessário, pode iniciar a quarta solicitação
                // performRequest4 { ... }
            }
        }
    }
}

func performRequest1(completion: @escaping (Bool) -> Void) {
    // Requisição assíncrona
    completion(true) // ou false em caso de erro
}

func performRequest2(completion: @escaping (Bool) -> Void) {
    completion(true)
}

func performRequest3(completion: @escaping (Bool) -> Void) {
    completion(false) // exemplo de interrupção
}

Assim, se a terceira solicitação terminar com erro (false), a quarta não será iniciada. O DispatchGroup ajuda a acompanhar a conclusão de cada solicitação, mas a sequência é controlada por chamadas aninhadas.