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)