Sobes.tech
Middle

Erzählen Sie mir vom Abbruchmechanismus in DispatchWorkItem.

sobes.tech KI

Antwort von AI

DispatchWorkItem stellt einen Codeblock dar, der geplant werden kann, um in einer Dispatch-Warteschlange ausgeführt zu werden, und der vor seiner tatsächlichen Ausführung abgebrochen werden kann.

Das Abbrechen wird durch eine Flagge innerhalb von DispatchWorkItem implementiert. Der Abbruchmechanismus ist kooperativ: DispatchWorkItem muss regelmäßig seinen Abbruchstatus überprüfen.

Beim Aufruf der Methode cancel() bei DispatchWorkItem wird die Abbruchflagge gesetzt. Die tatsächliche Unterbrechung der Ausführung erfolgt nur, wenn innerhalb des Codeblocks von DispatchWorkItem diese Flagge mit der Eigenschaft isCancelled überprüft wird.

Beispiel für die Verwendung:

let aufgabe: DispatchWorkItem = DispatchWorkItem {
    for i in 0..<100 {
        guard !self.isCancelled else { // Überprüfung der Abbruchflagge
            print("Operation abgebrochen bei Iteration \(i)")
            return // Beenden der Ausführung
        }
        // Nützliche Arbeit ausführen
        Thread.sleep(forTimeInterval: 0.1) // Simulation einer langen Operation
    }
    print("Operation abgeschlossen")
}

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

// Arbeit nach 1 Sekunde abbrechen
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
    aufgabe.cancel()
}

Wichtige Punkte:

  • Sofortiges Abbrechen ist nicht garantiert; hängt davon ab, wie häufig isCancelled innerhalb des Blocks überprüft wird.
  • Ein DispatchWorkItem mit Abbruch kann in die Warteschlange gestellt werden, aber sein Block wird nicht ausgeführt, wenn isCancelled vor Beginn überprüft wird.
  • Das Aufrufen von cancel() bei bereits ausgeführtem oder abgebrochenem DispatchWorkItem hat keine Wirkung.

Eigenschaften:

Eigenschaft Typ Beschreibung
isCancelled Bool Gibt true zurück, wenn die Arbeit abgebrochen wurde.