我有一个长时间运行的任务,将在后台队列中连续运行。
一个特殊要求是我希望最大队列大小为1,并且它是LIFO。
因此,如果在作业运行时N个项目进入,我希望删除所有项目除了最新的项目。类似于" debounce"的工作原理。
答案 0 :(得分:2)
此类事情通常使用GCD中的DISPATCH_SOURCE_TYPE_DATA_OR
来源完成。这将多个请求(通过dispatch_source_merge_data()
触发)合并为源事件处理程序的单个调用。
它仅限于使用dispatch_source_get_data()
可检索的64位“有效负载”,(从传递给merge_data()的所有值进行原子OR运算,这些值被合并到此处理程序的特定调用中。)
或者,可以使用DATA_ADD
源来简单地计算合并到单个处理程序调用中的请求数。
如果请求在事件处理程序已经执行时进入,则事件处理程序将在上一次调用完成后立即再次运行(以传递在执行上一个处理程序期间合并的所有请求)。 / p>