Sobes.tech
Junior

Гурӯҳи фиристодан чист?

sobes.tech AI

Ҷавоб аз AI

Dispatch Group — механизм дар фреймворки Grand Central Dispatch (GCD), ки имкон медиҳад вазифаҳоро гурӯҳбандӣ кунад ва дархост кунад, ки вақте ҳамаи вазифаҳо дар гурӯҳ анҷом ёфтанд, огоҳӣ диҳад.

Методҳои асосӣ:

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

Маслиҳат барои истифода:

import Foundation

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

queue.async(group: group) {
    // Вазифа 1
    print("Вазифа 1 дар иҷро")
    Thread.sleep(forTimeInterval: 2)
    print("Вазифа 1 анҷом ёфт")
}

queue.async(group: group) {
    // Вазифа 2
    print("Вазифа 2 дар иҷро")
    Thread.sleep(forTimeInterval: 1)
    print("Вазифа 2 анҷом ёфт")
}

group.notify(queue: DispatchQueue.main) {
    // Ин блок пас аз анҷоми ҳамаи вазифаҳо иҷро мешавад
    print("Ҳама вазифаҳо анҷом ёфтанд")
}

// Барои он ки ҷараёни асосӣ фавран ба охир нарасад. Дар барномаи воқеӣ, ин бо истифода аз цикл RunLoop идора мешавад
// Ё бо wait() дар ҳолати интизории синхронӣ (дар барномаҳои UI тавсия намешавад)
Thread.sleep(forTimeInterval: 3)