在iOS中我有一个应用程序,我需要等待GCD队列中当前运行的块完成。我的印象是这行代码只会这样做:
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/
据我了解,这行代码将阻止子序列执行,直到全局队列上运行的所有任务完成。在我的代码中,这似乎并没有发生。有人可以建议一种方法吗?
谢谢,
道格
答案 0 :(得分:5)
dispatch_sync()
技巧仅适用于串行队列,这是本教程所展示的内容。 dispatch_get_global_queue()
返回并发队列,请参阅it's documentation note:
提交给这些全局并发队列的块可以相互同时执行。
要处理全局并发队列,您应该使用提交块的组,也在该教程中提及,并等待整个组dispatch_group_wait()
。