Junior
Czym jest grupa dispatch?
sobes.tech AI
Odpowiedź od AI
Dispatch Group to mechanizm w ramach frameworka Grand Central Dispatch (GCD), który pozwala grupować zadania i otrzymywać powiadomienie, gdy wszystkie zadania w grupie zostaną zakończone.
Główne metody:
enter(): Zwiększa licznik zadań w grupie. Wywoływana przed rozpoczęciem zadania asynchronicznego.leave(): Zmniejsza licznik zadań w grupie. Wywoływana po zakończeniu zadania asynchronicznego.notify(queue:execute:): Rejestruje blok kodu, który zostanie wykonany na wskazanej kolejce po tym, jak licznik zadań w grupie osiągnie zero.wait(): Blokuje bieżący wątek do czasu, aż licznik zadań w grupie osiągnie zero. Należy używać ostrożnie, aby uniknąć zablokowania głównego wątku.
Przykład użycia:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global()
queue.async(group: group) {
// Zadanie 1
print("Zadanie 1 w toku")
Thread.sleep(forTimeInterval: 2)
print("Zadanie 1 zakończone")
}
queue.async(group: group) {
// Zadanie 2
print("Zadanie 2 w toku")
Thread.sleep(forTimeInterval: 1)
print("Zadanie 2 zakończone")
}
group.notify(queue: DispatchQueue.main) {
// Ten blok zostanie wykonany po zakończeniu wszystkich zadań
print("Wszystkie zadania zakończone")
}
// Aby główny wątek nie zakończył się od razu. W rzeczywistej aplikacji zarządza się tym pętlą RunLoop
// Lub wait() w przypadku oczekiwania synchronicznego (niezalecane w aplikacjach UI)
Thread.sleep(forTimeInterval: 3)