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)