Sobes.tech
Junior

Kas ir dispatch grupa?

sobes.tech AI

Atbilde no AI

Dispatch Group ir mehānisms Grand Central Dispatch (GCD) ietvarā, kas ļauj grupēt uzdevumus un saņemt paziņojumu, kad visi uzdevumi grupā ir pabeigti.

Galvenās metodes:

  • enter(): Palielina uzdevumu skaitītāju grupā. Izsauc pirms asīnhrona uzdevuma sākšanas.
  • leave(): Samazina uzdevumu skaitītāju grupā. Izsauc pēc asīnhrona uzdevuma pabeigšanas.
  • notify(queue:execute:): Reģistrē koda bloku, kas tiks izpildīts norādītajā rindā pēc tam, kad uzdevumu skaitītājs grupā sasniegs nulli.
  • wait(): Bloķē pašreizējo pavedienu, līdz uzdevumu skaitītājs grupā sasniedz nulli. Jālieto ar piesardzību, lai izvairītos no galvenā pavediena bloķēšanas.

Piemērs:

import Foundation

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

queue.async(group: group) {
    // Uzdevums 1
    print("Uzdevums 1 tiek izpildīts")
    Thread.sleep(forTimeInterval: 2)
    print("Uzdevums 1 pabeigts")
}

queue.async(group: group) {
    // Uzdevums 2
    print("Uzdevums 2 tiek izpildīts")
    Thread.sleep(forTimeInterval: 1)
    print("Uzdevums 2 pabeigts")
}

group.notify(queue: DispatchQueue.main) {
    // Šis bloks tiks izpildīts pēc visu uzdevumu pabeigšanas
    print("Visi uzdevumi ir pabeigti")
}

// Lai galvenais pavedienu nebeigtos uzreiz. Reālajā lietojumā to pārvalda RunLoop cikls
// Vai ar wait() sinhronai gaidīšanai (neieteicams UI lietojumos)
Thread.sleep(forTimeInterval: 3)