Sobes.tech
Junior

O que é um grupo de despacho?

sobes.tech IA

Resposta da IA

O Dispatch Group é um mecanismo no framework Grand Central Dispatch (GCD) que permite agrupar tarefas e receber uma notificação quando todas as tarefas do grupo forem concluídas.

Métodos principais:

  • enter(): Aumenta o contador de tarefas no grupo. É chamado antes de iniciar uma tarefa assíncrona.
  • leave(): Diminui o contador de tarefas no grupo. É chamado após a conclusão de uma tarefa assíncrona.
  • notify(queue:execute:): Regista um bloco de código que será executado na fila especificada após o contador de tarefas no grupo atingir zero.
  • wait(): Bloqueia o thread atual até que o contador de tarefas no grupo atinja zero. Deve ser usado com cautela para evitar bloquear o thread principal.

Exemplo de uso:

import Foundation

let group = DispatchGroup()
let queue = DispatchQueue.global()

queue.async(group: group) {
    // Tarefa 1
    print("Tarefa 1 em execução")
    Thread.sleep(forTimeInterval: 2)
    print("Tarefa 1 concluída")
}

queue.async(group: group) {
    // Tarefa 2
    print("Tarefa 2 em execução")
    Thread.sleep(forTimeInterval: 1)
    print("Tarefa 2 concluída")
}

group.notify(queue: DispatchQueue.main) {
    // Este bloco será executado após a conclusão de todas as tarefas
    print("Todas as tarefas concluídas")
}

// Para que o thread principal não termine imediatamente. Em uma aplicação real, isso é gerido por um ciclo RunLoop
// Ou wait() em caso de espera síncrona (não recomendado em aplicações UI)
Thread.sleep(forTimeInterval: 3)