经常有这样的需求:1,有m个网络请求。2,先并发执行其中n几个。3,待这n个请求完成之后再执行第n+1个请求。4然后等 第n+1个请求完成后再并发执行剩下的m-(n+1)个请求。
如果我们用GCD,可以使用dispatcg_barrier_async 来实现,如下:
注意看图片中注释的哪一行代码,dispatch_global 跟 dispatch_barrier 结合起来是起不到barrier 的作用的,查阅dispatch_barrier的开发者文档我们发现如下一段描述:
意思是我们传入的queue 需要时使用dispatch_queue_create创建出来的,如果我们传的queue是 串行或 global,那这个方法的行为就跟 dispatch_sync差不多了,如果你对 dispatch_sync(同步执行) 不甚了解,没关系,你只需要知道,barrier 执行的不再是我们预想的顺序了,dispatch_sync 的一个特点是,放进去任务就开始执行。
如果我们用NSOpeartion,可以使用addDenpency 来实现,如下:
可以看到这种方法虽然实现了设定顺序,但是并不优雅。