Sobes.tech
Junior

Cos'è un gruppo di dispatch?

sobes.tech AI

Risposta dell'AI

Dispatch Group è un meccanismo nel framework Grand Central Dispatch (GCD) che consente di raggruppare i task e ricevere una notifica quando tutti i task nel gruppo sono completati.

Metodi principali:

  • enter(): Aumenta il contatore dei task nel gruppo. Viene chiamato prima di iniziare un task asincrono.
  • leave(): Diminuisce il contatore dei task nel gruppo. Viene chiamato dopo aver completato un task asincrono.
  • notify(queue:execute:): Registra un blocco di codice che verrà eseguito sulla coda specificata dopo che il contatore dei task nel gruppo raggiunge zero.
  • wait(): Blocca il thread corrente fino a quando il contatore dei task nel gruppo non raggiunge zero. Da usare con cautela per evitare di bloccare il thread principale.

Esempio di utilizzo:

import Foundation

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

queue.async(group: group) {
    // Task 1
    print("Task 1 in esecuzione")
    Thread.sleep(forTimeInterval: 2)
    print("Task 1 completato")
}

queue.async(group: group) {
    // Task 2
    print("Task 2 in esecuzione")
    Thread.sleep(forTimeInterval: 1)
    print("Task 2 completato")
}

group.notify(queue: DispatchQueue.main) {
    // Questo blocco verrà eseguito dopo che tutti i task sono stati completati
    print("Tutti i task sono completati")
}

// Per evitare che il thread principale termini subito. In un'app reale, questo viene gestito con un ciclo RunLoop
// Oppure con wait() in caso di attesa sincrona (non raccomandato nelle app UI)
Thread.sleep(forTimeInterval: 3)