GCD异步串行队列 - 可以限制队列大小?

时间:2016-06-22 16:44:31

标签: ios objective-c cocoa grand-central-dispatch

我有一个长时间运行的任务,将在后台队列中连续运行。

一个特殊要求是我希望最大队列大小为1,并且它是LIFO。

因此,如果在作业运行时N个项目进入,我希望删除所有项目除了最新的项目。类似于" debounce"的工作原理。

1 个答案:

答案 0 :(得分:2)

此类事情通常使用GCD中的DISPATCH_SOURCE_TYPE_DATA_OR来源完成。这将多个请求(通过dispatch_source_merge_data()触发)合并为源事件处理程序的单个调用。

它仅限于使用dispatch_source_get_data()可检索的64位“有效负载”,(从传递给merge_data()的所有值进行原子OR运算,这些值被合并到此处理程序的特定调用中。)

或者,可以使用DATA_ADD源来简单地计算合并到单个处理程序调用中的请求数。

如果请求在事件处理程序已经执行时进入,则事件处理程序将在上一次调用完成后立即再次运行(以传递在执行上一个处理程序期间合并的所有请求)。 / p>