Sobes.tech
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.