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 после завершения первоначального первого задания.
Другими словами, я хочу удалить любую ожидающую задачу (не ту, которая выполняется в данный момент) из очереди, если я добавлю новую.
Есть ли встроенный механизм для этого или я должен реализовать это сам? И для последнего, как бы я определил отдельные задачи в очереди и удалил их?