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);
}
}];
}