Sobes.tech
Junior

Šta je dispatch grupa?

sobes.tech АИ

Одговор од АИ

Dispatch Group је механизам у оквиру framework-а 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)