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
isCancelledinnerhalb des Blocks überprüft wird. - Ein
DispatchWorkItemmit Abbruch kann in die Warteschlange gestellt werden, aber sein Block wird nicht ausgeführt, wennisCancelledvor Beginn überprüft wird. - Das Aufrufen von
cancel()bei bereits ausgeführtem oder abgebrochenemDispatchWorkItemhat keine Wirkung.
Eigenschaften:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
isCancelled |
Bool |
Gibt true zurück, wenn die Arbeit abgebrochen wurde. |