Sobes.tech
Junior

Was ist eine Dispatch-Gruppe?

sobes.tech KI

Antwort von AI

Dispatch Group ist ein Mechanismus im Framework Grand Central Dispatch (GCD), der es ermöglicht, Aufgaben zu gruppieren und eine Benachrichtigung zu erhalten, wenn alle Aufgaben in der Gruppe abgeschlossen sind.

Hauptmethoden:

  • enter(): Erhöht den Zähler der Aufgaben in der Gruppe. Wird vor Beginn einer asynchronen Aufgabe aufgerufen.
  • leave(): Verringert den Zähler der Aufgaben in der Gruppe. Wird nach Abschluss einer asynchronen Aufgabe aufgerufen.
  • notify(queue:execute:): Registriert einen Codeblock, der auf der angegebenen Warteschlange ausgeführt wird, nachdem der Aufgaben-Zähler in der Gruppe null erreicht hat.
  • wait(): Blockiert den aktuellen Thread, bis der Aufgaben-Zähler in der Gruppe null erreicht. Sollte mit Vorsicht verwendet werden, um das Blockieren des Haupt-Threads zu vermeiden.

Beispiel für die Verwendung:

import Foundation

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

queue.async(group: group) {
    // Aufgabe 1
    print("Aufgabe 1 läuft")
    Thread.sleep(forTimeInterval: 2)
    print("Aufgabe 1 beendet")
}

queue.async(group: group) {
    // Aufgabe 2
    print("Aufgabe 2 läuft")
    Thread.sleep(forTimeInterval: 1)
    print("Aufgabe 2 beendet")
}

group.notify(queue: DispatchQueue.main) {
    // Dieser Block wird nach Abschluss aller Aufgaben ausgeführt
    print("Alle Aufgaben sind beendet")
}

// Damit der Haupt-Thread nicht sofort endet. In einer echten Anwendung wird dies durch eine RunLoop-Schleife gesteuert
// Oder wait() bei synchroner Wartezeit (nicht empfohlen in UI-Anwendungen)
Thread.sleep(forTimeInterval: 3)