2015-03-03 83 views
0

Waiting until two async blocks are executed before starting another block

dispatch_group_async(group, queue,^{ 
... 
}); 

运行任务异步。但我的任务本身async,它调用回调处理程序。

所以,当将我的任务声明dispatch_group_async上下文中完成

当我的回调被执行时它会被调用吗?

如果你能提供会发生,直到我的任务将宣告完成将是非常有益的一点是事件的序列

+0

你的意思是“我的任务” - dispatch_group中的异步任务?调度dispatch_group上的任务的任务是什么? – Paulw11 2015-03-03 05:50:35

+0

将在dispatch_group_async中执行的块将具有异步n/w请求 – GJain 2015-03-03 05:52:26

+0

因此,一旦块将异步网络请求排队后,任务将继续释放dispatch_group,因此从dispatch_group的角度(以及执行'dispatch_group_notify'或'dispatch_group_wait'),即使网络活动仍在后台继续,任务也将完成。 – Paulw11 2015-03-03 05:55:15

回答

1

如果你发送一个异步任务,说:“任务B”,一个dispatch_group_async里面,说“任务A“,那么即使任务B仍可能正在执行,任务A在任务A块结束时即被视为完成。

因此,鉴于

dispatch_async_group(group,queue, ^{ 
     [someAsyncTask B]; 
}); 

dispatch_async_group(group,queue, ^{ 
     [someAsyncTask C]; 
}); 

dispatch_async_group(group,queue, ^{ 
     [someAsyncTask D]; 
}); 

dispatch_group_wait(group,10000); 

dispatch_group_wait为最终dispatch_async_group块执行完毕后,即使任务B/C/d可能仍在运行将尽快返回。

如果您对任务B/C/D使用同步调度,那么您的调度组将在B,C & D完成后视为完成。

+0

非常感谢您......我将清理上面的线程 – GJain 2015-03-03 06:06:39