Middle
iOS dasturlash kontekstida dispatch guruh nima?
sobes.tech AI
AIdan javob
DispatchGroup — bu, GCD (Grand Central Dispatch) mexanizmi bo'lib, u asinxron vazifalar guruhining yakunlanishini kuzatishga va ularning bajarilishini so'ng amalga oshirishga imkon beradi. Bir nechta dispatch navbatlari yoki oqimlarining ishini muvofiqlashtirish uchun qulay.
Asosiy metodlar:
enter(): Guruhga vazifa boshlangani haqida xabar beradi. Guruhning ichki hisoblagichini oshiradi.leave(): Guruhga vazifa tugaganini bildiradi. Hisoblagichni kamaytiradi.wait(): Hozirgi oqimni bloklaydi, guruhning hisoblagichi nolga teng bo'lguncha yoki timeout o'tgach.notify(queue:execute:): Belgilangan navbatda, guruh hisoblagichi nolga teng bo'lsa, asinxron ravishda bajariladigan kod blokini ro'yxatdan o'tkazadi.
notify dan foydalanish misoli:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global(qos: .userInitiated)
queue.async(group: group) {
// Birinchi asinxron vazifa
print("Vazifa 1 bajarilmoqda...")
Thread.sleep(forTimeInterval: 1)
print("Vazifa 1 yakunlandi.")
}
queue.async(group: group) {
// Ikkinchi asinxron vazifa
print("Vazifa 2 bajarilmoqda...")
Thread.sleep(forTimeInterval: 2)
print("Vazifa 2 yakunlandi.")
}
// Bu blok, guruhdagi barcha vazifalar tugagach bajariladi
group.notify(queue: .main) {
print("Barcha vazifalar guruhda yakunlandi.")
}
// Notify ning no-bloklovchi tabiatini ko'rsatish uchun
print("Vazifalar qo'shilgandan so'ng kod")
Qo'lda enter() va leave() bilan misol:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global(qos: .userInitiated)
group.enter() // Vazifa 1 boshlandi
queue.async {
print("Vazifa 1 bajarilmoqda...")
Thread.sleep(forTimeInterval: 1)
print("Vazifa 1 yakunlandi.")
group.leave() // Vazifa 1 yakunlandi
}
group.enter() // Vazifa 2 boshlandi
queue.async {
print("Vazifa 2 bajarilmoqda...")
Thread.sleep(forTimeInterval: 2)
print("Vazifa 2 yakunlandi.")
group.leave() // Vazifa 2 yakunlandi
}
group.notify(queue: .main) {
print("Barcha vazifalar, notify bilan yakunlandi.")
}
// `wait` dan foydalanish misoli (bloklovchi)
// group.wait()
// print("Barcha vazifalar wait bilan yakunlandi.") // Bu kod, barcha vazifalar tugagach, bajariladi va joriy oqimni bloklaydi.