2012-02-19 64 views
3

在iOS中我有一个应用程序,我需要等待GCD队列上当前正在运行的块完成。我的印象是,这行代码将做到这一点:Grand Central Dispatch:如何等待块的队列完成?

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{});

我从这里这个提示:

http://www.fieryrobot.com/blog/2010/06/27/a-simple-job-queue-with-grand-central-dispatch/

据我了解,这行代码会阻止子序列执行,直到全局队列上运行的所有任务完成。在我的代码中,这似乎并没有发生。有人可以提出一个方法来做到这一点吗?

感谢,
道格

回答

5

dispatch_sync()只会串行队列工作,这是什么,教程显示。该dispatch_get_global_queue()返回并发队列,看it's documentation note

块提交到这些全局并发队列可相对于彼此同时执行。

对付你应该使用在您提交您的块一组,也该教程提到一个全球性的并发队列,并等待整个组dispatch_group_wait()

+0

宾果。这确实是问题。切换到顺序FIFO队列现在有这个工作。非常感谢Grzegorz。 – dugla 2012-02-20 16:07:34

+1

如果您已经在队列中,则它不起作用,因为它会死锁。 – OrangeDog 2014-12-18 17:31:52

相关问题