Sobes.tech
Junior

Kas yra dispatch grupė?

sobes.tech AI

Atsakymas iš AI

Dispatch Group yra mechanizmas Grand Central Dispatch (GCD) karkase, leidžiantis grupuoti užduotis ir gauti pranešimą, kai visi užduotys grupėje bus užbaigtos.

Pagrindiniai metodai:

  • enter(): Padidina užduočių skaitiklį grupėje. Kviečiama prieš pradedant asinchroninę užduotį.
  • leave(): Sumažina užduočių skaitiklį grupėje. Kviečiama po asinchroninės užduoties pabaigos.
  • notify(queue:execute:): Registruoja kodo bloką, kuris bus vykdomas nurodytoje eilėje po to, kai užduočių skaitiklis grupėje pasieks nulį.
  • wait(): Blokuoja dabartinį srautą, kol užduočių skaitiklis grupėje pasieks nulį. Reikia naudoti atsargiai, kad išvengtumėte pagrindinio srauto užblokavimo.

Pavyzdys:

import Foundation

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

queue.async(group: group) {
    // Užduotis 1
    print("Užduotis 1 vyksta")
    Thread.sleep(forTimeInterval: 2)
    print("Užduotis 1 baigta")
}

queue.async(group: group) {
    // Užduotis 2
    print("Užduotis 2 vyksta")
    Thread.sleep(forTimeInterval: 1)
    print("Užduotis 2 baigta")
}

group.notify(queue: DispatchQueue.main) {
    // Šis blokas bus vykdomas po visų užduočių pabaigos
    print("Visos užduotys baigtos")
}

// Kad pagrindinis srautas neužbaigtųsi iš karto. Realiame taikyme tai valdo RunLoop ciklas
// Arba su wait() sinchroniniam laukimui (nerekomenduojama UI taikymuose)
Thread.sleep(forTimeInterval: 3)