Sobes.tech
Junior — Middle

Kann man die Ausführung einer Aufgabe in GCD vor deren Abschluss abbrechen?

sobes.tech KI

Antwort von AI

In GCD (Grand Central Dispatch) ist es nicht möglich, die Ausführung einer bereits gestarteten Aufgabe direkt abzubrechen. Aufgaben, die in die Warteschlange gestellt wurden, werden bis zum Abschluss ausgeführt.

Es ist jedoch möglich, eine Aufgabe indirekt abzubrechen:

  • Für asynchrone Aufgaben verwenden Sie DispatchWorkItem, das die Methode cancel() unterstützt. Die Aufgabe selbst sollte regelmäßig die Eigenschaft isCancelled überprüfen und korrekt beenden, wenn eine Abbruchanfrage vorliegt.

Beispiel:

let workItem = DispatchWorkItem {
    for i in 0..<1000 {
        if workItem.isCancelled {
            print("Aufgabe abgebrochen")
            return
        }
        // Arbeit ausführen
    }
}

DispatchQueue.global().async(execute: workItem)

// Später
workItem.cancel()

Daher ist eine Abbruch nur möglich, wenn die Aufgabe die Überprüfung auf Abbruch unterstützt, andernfalls kann sie nicht zwangsweise beendet werden.