有a、b、c、d 4个异步请求,如何判断a、b、c、d都完成执行?如果需要a、b、c、d顺序执行,该如何实现?
对于这四个异步请求,要判断都执行完成最简单的方式就是通过GCD的group来实现:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
/*任务a */
});
dispatch_group_async(group, queue, ^{
/*任务b */
});
dispatch_group_async(group, queue, ^{
/*任务c */
});
dispatch_group_async(group, queue, ^{
/*任务d */
});
dispatch_group_notify(group,dispatch_get_main_queue(), ^{
// 在a、b、c、d异步执行完成后,会回调这里});
当然,我们还可以使用非常老套的方法来处理,通过四个变量来标识a、b、c、d四个任务是否完成,然后在runloop中让其等待,当完成时才退出runloop。但是这样做会让后面的代码得不到执行,直到Run loop执行完毕。
解释:要求顺序执行,那么可以将任务放到串行队列中,自然就是按顺序来异步执行了。
本文介绍了如何使用GCD的group来管理多个异步请求,确保a、b、c、d四个请求的完成判断,并在所有请求完成后执行回调。同时,通过将任务放入串行队列,可以实现这些请求的顺序执行。这种方法避免了使用旧式的runloop等待方式,提高了代码的效率和可读性。
1198

被折叠的 条评论
为什么被折叠?



