GCD: Как удалить ожидающие задачи из последовательной очереди?

Сначала я создаю последовательную очередь, как это

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

затем в какой-то неизвестный момент времени задача добавляется в очередь, как это

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

Если первая задача еще не завершена, новая задача будет ждать до тех пор, пока не завершится первая (это, конечно, для чего нужна последовательная очередь).

Но если я добавлю 5 новых задач в очередь, пока оригинальная первая еще выполняется, я не хочу выполнять новую задачу №1, затем №2, затем №3 и т. Д., Но хочу получить избавьтесь от задач с 1 по 4 и сразу же приступите к выполнению задачи № 5 после завершения первоначального первого задания.

Другими словами, я хочу удалить любую ожидающую задачу (не ту, которая выполняется в данный момент) из очереди, если я добавлю новую.

Есть ли встроенный механизм для этого или я должен реализовать это сам? И для последнего, как бы я определил отдельные задачи в очереди и удалил их?

Ответы на вопрос(3)

Ваш ответ на вопрос