iOS多个网络请求任务同步执行全部完成之后再进行操作

1.使用dispatch_group_t

dispatch_group_t taskGroup = dispatch_group_create();
dispatch_group_enter(taskGroup);
dispatch_group_leave(taskGroup);
dispatch_group_notify(taskGroup, dispatch_get_main_queue(), ^{
 });

可以理解为:创建一个dispatch_group_t,每次请求前先dispatch_group_enter,请求回调后再dispatch_group_leave,需要注意有几次enter就要有几次leave,否则group会一直存在,当所有enter都leave后,会执行dispatch_group_notify的block。

- (void)doAllTask{
    [self doTask1CallBack:^(BOOL success) {
        NSLog(@"所有任务处理完成");
    }];
}
- (void)doTask1CallBack:(void (^)(BOOL success))finishBlock{
    WEAKSELF
    [[HttpRequestManager shareHttpRequestManager] HttpRequestPOST:@"" parameters:nil success:^(NSURLSessionDataTask * _Nullable task, id  _Nullable responseObject) {
           dispatch_group_t taskGroup = dispatch_group_create();
           dispatch_group_enter(taskGroup);
           [weakSelf doTask2CallBack:^(BOOL success) {
                        dispatch_group_leave(taskGroup);
            }];
           dispatch_group_notify(taskGroup, dispatch_get_main_queue(), ^{
                   NSLog(@"第1个任务批处理任务全部完成");
                   if (finishBlock) {
                         finishBlock(true);
                   }
             });

            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            if (finishBlock) {
                finishBlock(true);
            }
        }];
}
-(void)doTask2CallBack:(void (^)(BOOL success))finishBlock{
    WEAKSELF
    [[HttpRequestManager shareHttpRequestManager] HttpRequestPOST:@"" parameters:nil success:^(NSURLSessionDataTask * _Nullable task, id  _Nullable responseObject) {
           dispatch_group_t taskGroup = dispatch_group_create();
           dispatch_group_enter(taskGroup);
           [weakSelf doTask3CallBack:^(BOOL success) {
                  dispatch_group_leave(taskGroup);
           }];
                    
            dispatch_group_notify(taskGroup, dispatch_get_main_queue(), ^{
                 NSLog(@"第2个任务批处理任务全部完成");
                if (finishBlock) {
                    finishBlock(true);
                }
            });

            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            if (finishBlock) {
                finishBlock(true);
            }
        }];
}
-(void)doTask3CallBack:(void (^)(BOOL success))finishBlock{
    WEAKSELF
    [[HttpRequestManager shareHttpRequestManager] HttpRequestPOST:@"" parameters:nil success:^(NSURLSessionDataTask * _Nullable task, id  _Nullable responseObject) {
           NSLog(@"第3个任务批处理任务全部完成");
           if (finishBlock) {
               finishBlock(true);
           }
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            if (finishBlock) {
                finishBlock(true);
            }
        }];
}

你可能感兴趣的:(iOS多个网络请求任务同步执行全部完成之后再进行操作)