如何使用GCD对异步后台任务进行排序?

时间:2011-08-26 15:19:47

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

我在iOS上使用GCD在后台线程上执行一项耗时的任务。 API有一个start方法,它接受两个块作为参数,两个块都在主队列上调用。第一个在任务开始时调用,第二个在任务完成时调用。一切正常。

我实际上需要完成其中几项耗时的任务。 API允许我同时启动它们,然后等待每个完成并通过块更新UI。它们同时运行。

然而,我实际上想要做的是对耗时的任务进行排序(仍然使用所描述的API开始),以便我可以同时启动所有任务,让第一个运行并给我调用-backs,然后让第二个运行并给我回调等等,直到完成所有操作。

使用GCD和阻止实现此目标的最佳方法是什么?

如果任务是同步的,我只需要一个循环来依次运行每个任务,并以异步方式运行所有这些任务。但我有回电,所以这不起作用。我宁愿不必将它们链接起来,因为一旦它开始事件序列,使所有这一切发生的对象就会消失。

2 个答案:

答案 0 :(得分:1)

您可以创建自己的串行队列,该队列将以dispatch_queue_create的FIFO顺序执行。您不需要指定它是一个串行队列。它默认会以这种方式行事。

示例队列创建:

dispatch_queue_t my_q = dispatch_queue_create("Serial",NULL);

您拥有此队列,因此无法释放它(使用dispatch_release)会泄漏它。

更多信息位于Apple's docs here

答案 1 :(得分:0)

您是否有特殊原因需要使用GCD?听起来像NSOperationQueue并发1就是你想要的。