需求:同时并行发送多个请求,等最后一个(耗时最长的一个)请求返回,统一执行某个操作。
使用队列和组实现
代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
[NetWorkTool getUserInfoWithPhotoNum:@"111" completion:^{
NSLog(@"load user info success!");
dispatch_group_leave(group);
}];
dispatch_group_enter(group);
[NetWorkTool getRecommendDataWithIdentifier:@"222" completion:^{
NSLog(@"load recomment date success");
dispatch_group_leave(group);
}];
dispatch_group_notify(group, queue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"netWork Success");
});
});
}
模拟网络请求
+ (void)getUserInfoWithPhotoNum:(NSString *)phontNum completion:(void(^)(void))completion {
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_async(queue, ^{
sleep(3);
dispatch_async(dispatch_get_main_queue(), ^{
completion();
});
});
}
+ (void)getRecommendDataWithIdentifier:(NSString *)identifier completion:(void(^)(void))completion {
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_async(queue, ^{
sleep(2);
dispatch_async(dispatch_get_main_queue(), ^{
completion();
});
});
}