Sobes.tech
Junior

Czym jest grupa dispatch?

sobes.tech AI

Odpowiedź od AI

Dispatch Group to mechanizm w ramach frameworka Grand Central Dispatch (GCD), który pozwala grupować zadania i otrzymywać powiadomienie, gdy wszystkie zadania w grupie zostaną zakończone.

Główne metody:

  • enter(): Zwiększa licznik zadań w grupie. Wywoływana przed rozpoczęciem zadania asynchronicznego.
  • leave(): Zmniejsza licznik zadań w grupie. Wywoływana po zakończeniu zadania asynchronicznego.
  • notify(queue:execute:): Rejestruje blok kodu, który zostanie wykonany na wskazanej kolejce po tym, jak licznik zadań w grupie osiągnie zero.
  • wait(): Blokuje bieżący wątek do czasu, aż licznik zadań w grupie osiągnie zero. Należy używać ostrożnie, aby uniknąć zablokowania głównego wątku.

Przykład użycia:

import Foundation

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

queue.async(group: group) {
    // Zadanie 1
    print("Zadanie 1 w toku")
    Thread.sleep(forTimeInterval: 2)
    print("Zadanie 1 zakończone")
}

queue.async(group: group) {
    // Zadanie 2
    print("Zadanie 2 w toku")
    Thread.sleep(forTimeInterval: 1)
    print("Zadanie 2 zakończone")
}

group.notify(queue: DispatchQueue.main) {
    // Ten blok zostanie wykonany po zakończeniu wszystkich zadań
    print("Wszystkie zadania zakończone")
}

// Aby główny wątek nie zakończył się od razu. W rzeczywistej aplikacji zarządza się tym pętlą RunLoop
// Lub wait() w przypadku oczekiwania synchronicznego (niezalecane w aplikacjach UI)
Thread.sleep(forTimeInterval: 3)