首先我创建一个这样的串行队列
static dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_SERIAL);
然后,在某个未知的时间点,一个任务像这样被添加到队列中
dispatch_async(queue, ^{
// do something, which takes some time
});
如果第一个任务尚未完成,则新任务将等到第一个任务完成(这当然是串行队列的用途)。
但是如果我将 5 个新任务添加到队列中,而原来的第一个任务仍在运行,我不想执行新任务 no.1,然后是 no.2,然后是 no.3 等等,而是想得到去掉task 1到task 4,在原来的第一个task完成后直接开始执行task no.5。
换句话说,如果我添加一个新任务,我想从队列中弹出任何等待任务(不是当前正在运行的任务)。
是否有内置机制,还是我必须自己实现?对于后者,我将如何识别队列中的单个任务并删除它们?