我正在尝试加速我的应用程序的启动,我的一个想法就是使用异步调度队列。我有2个任务可以在启动时彼此相邻运行(实际上是非常大的任务)。但是,它们都具有在主线程上运行的重要部分(主要是UI代码)。
dispatch_async(dispatch_get_main_queue, ^{
[self doTask1];
});
dispatch_async(dispatch_get_main_queue, ^{
[self doTask2];
//Will task 2 take turns with task 1, or will task 2 start after 1 is finished?
});
我的问题是:如果我在启动时调用2个dispatch_async,就像在这个例子中一样,它们会轮流执行,还是先完成第一个块,然后执行第二个块?
答案 0 :(得分:6)
主队列是一个串行队列。添加到串行队列的块按添加顺序执行,一次只执行一个(串行)。在您的示例中,task2将在task1完成后才会启动。
如果您希望它们同时运行,则需要将它们分配给其中一个全局并发队列。
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(q, ^{/* this work may finish before other work added to this queue later */});
答案 1 :(得分:-2)
一个将在另一个之后执行,但它们将同时执行,这意味着您可以在task1完成之前执行task2。
检查备选方案:
dispatch_async(dispatch_get_main_queue, ^{
[self doTask1];
dispatch_async(dispatch_get_main_queue, ^{
[self doTask2];
//Now task2 will execute after task1
});
});