如果必须等到主线程完成,使用dispatch_sync有什么好处?

时间:2012-02-27 19:59:08

标签: ios macos grand-central-dispatch

如果块必须等到主线程完成,为什么有人会使用dispatch_sync。使用此函数的好处是什么,而不是在线编写代码(非块和在Grand Central Dispatch之外)。我可能误解了dispatch_sync实际上做了什么。感谢。

2 个答案:

答案 0 :(得分:7)

dispatch_sync按照您的想法进行操作 - 它将块发布到指定队列并阻止当前队列,直到块执行完毕。主要队列/线程没有特别涉及,除非您要么派遣它或从它发送。

因此,如果必须在不同的队列/线程上执行操作(例如SQLite或OpenGL操作),通常会使用它,但是您需要操作的结果或者只需要知道操作已完成功能术语。

模式:

    dispatch_async(otherQueue,
    ^{
           id result = doHardTask();

           dispatch_async(originalQueue,
               ^{
                     didGetResult(result);
               });
    });

是更好的练习,但实际上并不是你可以在最后粘贴的东西。

答案 1 :(得分:0)

您可以使用dispatch_async来启动并发队列,并且在与该调用关联的块中,您可以使用dispatch_sync在第二个队列上启动一系列任务。这将在不阻塞主队列的情况下发生。