Sobes.tech
Junior — Middle

Оё метавонед шарҳ диҳед, ки структураи DispatchGroup чист ва чӣ гуна барои ҳамоҳангсозии иҷрои чанд вазифаи асинхронӣ истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

DispatchGroup — механизм дар iOS (GCD), ки имконият медиҳад, ки чандин вазифаҳои асинхронӣ гурӯҳбандӣ шуда, назорат карда шаванд. Он кӯмак мекунад, ки иҷрои вазифаҳо ҳамоҳанг карда шаванд, масалан, барои иҷрои баъд аз анҷоми ҳамаи вазифаҳо дар гурӯҳ.

Принсипи кор:

  • DispatchGroup сохта мешавад.
  • Ҳар як вазифаи асинхронӣ бо истифода аз enter() пеш аз оғоз ва leave() пас аз анҷом ба гурӯҳ дохил карда мешавад.
  • Мумкин аст, ки notify(queue:) даъват шавад, то огоҳӣ дар бораи анҷоми ҳамаи вазифаҳо дар гурӯҳ гирифта шавад.

Масал:

let group = DispatchGroup()

group.enter()
DispatchQueue.global().async {
    // Вазифаи асинхронӣ 1
    print("Вазифа 1 оғоз шуд")
    sleep(2)
    print("Вазифа 1 анҷом ёфт")
    group.leave()
}

group.enter()
DispatchQueue.global().async {
    // Вазифаи асинхронӣ 2
    print("Вазифа 2 оғоз шуд")
    sleep(1)
    print("Вазифа 2 анҷом ёфт")
    group.leave()
}

group.notify(queue: .main) {
    print("Ҳама вазифаҳо анҷом ёфт")
}

Ин тариқ, DispatchGroup кӯмак мекунад, ки интизорӣ бароед, то чандин амали параллелро ба анҷом расонед ва пас аз он кодро иҷро кунед.