Junior
Čo je to dispatch skupina?
sobes.tech AI
Odpoveď od AI
Dispatch Group je mechanizmus v rámci frameworku Grand Central Dispatch (GCD), ktorý umožňuje skupinové spracovanie úloh a prijímanie oznámení, keď sú všetky úlohy v skupine dokončené.
Hlavné metódy:
enter(): Zvyšuje čítač úloh v skupine. Volá sa pred začatím asynchrónnej úlohy.leave(): Znižuje čítač úloh v skupine. Volá sa po dokončení asynchrónnej úlohy.notify(queue:execute:): Registruje blok kódu, ktorý bude vykonaný na určenom rade po tom, ako čítač úloh v skupine dosiahne nulu.wait(): Blokuje aktuálny vlákno, kým čítač úloh v skupine nedosiahne nulu. Je potrebné ho používať opatrne, aby sa predišlo zablokovaniu hlavného vlákna.
Príklad použitia:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global()
queue.async(group: group) {
// Úloha 1
print("Úloha 1 beží")
Thread.sleep(forTimeInterval: 2)
print("Úloha 1 dokončená")
}
queue.async(group: group) {
// Úloha 2
print("Úloha 2 beží")
Thread.sleep(forTimeInterval: 1)
print("Úloha 2 dokončená")
}
group.notify(queue: DispatchQueue.main) {
// Tento blok bude vykonaný po dokončení všetkých úloh
print("Všetky úlohy sú dokončené")
}
// Aby hlavné vlákno neskončilo okamžite. V reálnej aplikácii sa týmto riadi cyklus RunLoop
// Alebo s wait() v prípade synchronného čakania (neodporúča sa v UI aplikáciách)
Thread.sleep(forTimeInterval: 3)