iOS中多个有依赖的网络请求的顺序执行

在开发时有这样一个需求,有a,b,c3个网络请求,,在a请求完成后,b发起请求,b完成后c发起请求,在c结束时获得一个通知。这相当于多线程同步以及依赖,我采用dispatch_group和信号量去处理。

测试代码

    //创建串行队列
    dispatch_queue_t customQuue = dispatch_queue_create("com.wumeng.network", DISPATCH_QUEUE_SERIAL);
     //创建信号量并初始化总量为1
    semaphoreLock = dispatch_semaphore_create(0);
    //添加任务
    dispatch_async(customQuue, ^{
       //发送第一个请求
        [PPNetworkHelper POST:kUrl1 parameters:nil success:^(id responseObject) {
            NSLog(@"第一个请求完成");
            //dispatch_semaphore_signal发送一个信号,让信号总量加1,相当于解锁
            dispatch_semaphore_signal(semaphoreLock);
        } failure:^(NSError *error) {
            dispatch_semaphore_signal(semaphoreLock);
        }];
         // 相当于加锁
        dispatch_semaphore_wait(semaphoreLock, DISPATCH_TIME_FOREVER);
        //发送第二个请求
        [PPNetworkHelper POST:kUrl2 parameters:nil success:^(id responseObject) {
            NSLog(@"第二个请求完成");
            //dispatch_semaphore_signal发送一个信号,让信号总量加1,相当于解锁
            dispatch_semaphore_signal(semaphoreLock);
        } failure:^(NSError *error) {
            dispatch_semaphore_signal(semaphoreLock);
        }];
        dispatch_semaphore_wait(semaphoreLock, DISPATCH_TIME_FOREVER);
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"任务完成");
        });
    });

通过运行结果可看出,因为是在串行队列里,每个任务会按顺序执行,在执行到第一个请求后会继续执行dispatch_semaphore_wait方法,此时semaphore=0,此线程进入等待状态,此时请求内部的异步回调会执行,执行到dispatch_semaphore_signal方法后semaphore=1,此线程恢复继续执行,这样就能实现多个有依赖的网络请求的顺序执行。

你可能感兴趣的:(iOS中多个有依赖的网络请求的顺序执行)