Sobes.tech
Junior

Ce este un grup de dispatch?

sobes.tech AI

Răspuns de la AI

Dispatch Group este un mecanism în cadrul framework-ului Grand Central Dispatch (GCD) care permite gruparea sarcinilor și primirea unei notificări atunci când toate sarcinile din grup sunt finalizate.

Metode principale:

  • enter(): Crește numărătoarea sarcinilor din grup. Este apelată înainte de a începe o sarcină asincronă.
  • leave(): Scade numărătoarea sarcinilor din grup. Este apelată după finalizarea unei sarcini asincrone.
  • notify(queue:execute:): Înregistrează un bloc de cod care va fi executat pe coada specificată după ce numărătoarea sarcinilor din grup ajunge la zero.
  • wait(): Blochează firul de execuție curent până când numărătoarea sarcinilor din grup ajunge la zero. Trebuie folosit cu precauție pentru a evita blocarea firului principal.

Exemplu de utilizare:

import Foundation

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

queue.async(group: group) {
    // Sarcina 1
    print("Sarcina 1 în curs")
    Thread.sleep(forTimeInterval: 2)
    print("Sarcina 1 finalizată")
}

queue.async(group: group) {
    // Sarcina 2
    print("Sarcina 2 în curs")
    Thread.sleep(forTimeInterval: 1)
    print("Sarcina 2 finalizată")
}

group.notify(queue: DispatchQueue.main) {
    // Acest bloc va fi executat după finalizarea tuturor sarcinilor
    print("Toate sarcinile au fost finalizate")
}

// Pentru ca firul principal să nu se încheie imediat. Într-o aplicație reală, acest lucru este gestionat de un ciclu RunLoop
// Sau wait() în cazul așteptării sincrone (nu recomandat în aplicațiile UI)
Thread.sleep(forTimeInterval: 3)