Sobes.tech
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)