GCD: Wie entferne ich wartende Aufgaben aus der seriellen Warteschlange?

Zuerst erstelle ich so eine serielle Warteschlange

static dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_SERIAL);

Dann wird zu einem unbekannten Zeitpunkt eine Aufgabe wie folgt zur Warteschlange hinzugefügt

dispatch_async(queue, ^{
    // do something, which takes some time
});

Wenn die erste Aufgabe noch nicht abgeschlossen ist, wartet die neue Aufgabe, bis die erste abgeschlossen ist (dafür ist natürlich eine serielle Warteschlange gedacht).

Wenn ich der Warteschlange jedoch 5 neue Aufgaben hinzufüge, während die ursprüngliche erste noch ausgeführt wird, möchte ich die neue Aufgabe Nr. 1, dann Nr. 2, dann Nr. 3 usw. nicht ausführen, sondern ausführen Befreien Sie sich von den Aufgaben 1 bis 4 und starten Sie die Ausführung der Aufgabe Nr. 5 direkt, nachdem die ursprüngliche erste Aufgabe beendet wurde.

Mit anderen Worten, ich möchte jede wartende Aufgabe (nicht die derzeit ausgeführte) aus der Warteschlange entfernen, wenn ich eine neue hinzufüge.

Gibt es einen eingebauten Mechanismus dafür oder muss ich diesen selbst implementieren? Und für letztere, wie würde ich einzelne Aufgaben in einer Warteschlange identifizieren und entfernen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage