如何在GCD中向调度队列的前面添加块?

时间:2014-06-11 14:20:19

标签: ios cocoa concurrency grand-central-dispatch

我想我曾经读过一篇关于在Grand Central Dispatch中将一个块添加到调度队列前面的方法(因此它不会等待其他待处理的块)。但我在GCD Reference中找不到它。有谁知道这是否可能,如果是这样的话?

2 个答案:

答案 0 :(得分:4)

没有公共API来“跳转”队列,也没有从队列中删除或重新排序先前排队但尚未执行的块。如果您只希望块以比其他块更高的优先级执行,则可以将其提交到高优先级全局并发队列,但是通过使用特定队列提供的任何并发保证自然会因此而丢失。除此之外,您必须自己实现此功能。

这样做的一种方法可能是在dispatch_async周围拥有自己的包装器,将每个块包装在另一个块中,这将使“队列跳转”块在每个非队列跳转块之前有机会执行。可以想象为“跳线”制作第二个串行队列,这些包装块可以相应地暂停和恢复。

但总的来说,一旦提交,就无法对GCD队列中的块重新排序。

答案 1 :(得分:2)

有些技术使用目标队列和暂停,可用于实现与多个相关队列类似的东西。

WWDC 2011会议“掌握Grand Central Dispatch”详细介绍了其中一个。