Sobes.tech
Junior

Co je to dispatch skupina?

sobes.tech AI

Odpověď od AI

Dispatch Group je mechanismus v rámci frameworku Grand Central Dispatch (GCD), který umožňuje seskupovat úkoly a dostávat oznámení, když jsou všechny úkoly ve skupině dokončeny.

Hlavní metody:

  • enter(): Zvyšuje čítač úkolů ve skupině. Volá se před začátkem asynchronního úkolu.
  • leave(): Snižuje čítač úkolů ve skupině. Volá se po dokončení asynchronního úkolu.
  • notify(queue:execute:): Registruje blok kódu, který bude proveden na specifikované frontě poté, co čítač úkolů ve skupině dosáhne nuly.
  • wait(): Zablokuje aktuální vlákno, dokud čítač úkolů ve skupině nedosáhne nuly. Je třeba používat opatrně, aby nedošlo k zablokování hlavního vlákna.

Příklad použití:

import Foundation

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

queue.async(group: group) {
    // Úkol 1
    print("Úkol 1 běží")
    Thread.sleep(forTimeInterval: 2)
    print("Úkol 1 dokončen")
}

queue.async(group: group) {
    // Úkol 2
    print("Úkol 2 běží")
    Thread.sleep(forTimeInterval: 1)
    print("Úkol 2 dokončen")
}

group.notify(queue: DispatchQueue.main) {
    // Tento blok bude proveden po dokončení všech úkolů
    print("Všechny úkoly dokončeny")
}

// Aby hlavní vlákno neskončilo ihned. V reálné aplikaci se tímto řídí cyklus RunLoop
// Nebo wait() v případě synchronního čekání (nedoporučuje se v UI aplikacích)
Thread.sleep(forTimeInterval: 3)