【发布时间】:2012-09-01 06:44:53
【问题描述】:
首先我创建一个这样的串行队列
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 等等,但是想去掉1到4号任务,等原来的第一个任务完成后直接开始执行5号任务。
换句话说,如果我添加一个新任务,我想从队列中弹出任何等待任务(不是当前正在运行的任务)。
是否有内置机制,还是我必须自己实现?而对于后者,我将如何识别队列中的单个任务并删除它们?
【问题讨论】:
标签: objective-c ios grand-central-dispatch