在异步中按顺序发起网络请求,并保证返回顺序一致

在iOS开发当中我们有时候会碰到这样一个需求场景.例如有三个网络请求A,B,C.C这个网络请求需要等待A,B网络请求执行完并返回数据并拿着A,B两个网络请求的返回数据作为参数发起C的网络请求。小伙伴们一想到这个肯定是想着用dispatch_group_async()组函数。但是这样有个问题来了,发送网络请求是用的AFN发送的,是在block中获取数据。这样如何能保证A,B两个网络请求都接受到了数据才发起C的网络请求了。有个方法成功解决了这个问题。dispatch_group_enter(group)和dispatch_group_leave(group)方法,废话不多说上代码:

dispatch_group_t group = dispatch_group_create();
dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);

dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
   [self checkLogin:^{
       // 网络请求A
      dispatch_group_leave(group);
    }];
});
dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
   [self checkLogin:^{
        // 网络请求B
        dispatch_group_leave(group);
    }];
});
dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
   [self checkLogin:^{
        // 网络请求C
        dispatch_group_leave(group);
    }];
});

ok成功解决异步当中还有异步的问题,完美解决数据返回的顺序问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,693评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 862评论 0 3
  • 淡雅清晨 一滴雨露 慵卧素莲 鱼儿嬉游 荷叶下活泼可爱 仿佛在听着蛙儿歌唱 蜻蜓扇动着翅膀 踏着轻盈舞步 岸旁吹来...
    预言涟漪阅读 377评论 0 0
  • 像我这种过份敏感又极度缺乏安全感的人 要是爱上了你就必须得占有你 如果无法占有你 相处对我来说绝对是种艰熬 眼不见...
    九月轻纱阅读 138评论 0 0