多个网络请求的并发
第一种GCD 方式:
// 创建信号量
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
// 创建全局并行
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
// 请求一
[self loadFriendList:^(id result) {
dispatch_semaphore_signal(semaphore);
}];
});
dispatch_group_async(group, queue, ^{
// 请求二
[self loadPhotoList:^(id result) {
dispatch_semaphore_signal(semaphore);
}];
});
dispatch_group_notify(group, queue, ^{
// 二个请求对应二次信号等待
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
//在这里 进行请求后的方法,回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
//更新UI操作
[self setConfiguration];
});
});
第二种 通过请求数量计数
typedefvoid(^Complete)();
@property(copy, nonatomic) Complete complete;
NSInteger requestCount = 0;
//第一个网络请求 [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) {
NSLog(@"duihuan11");
requestCount++;
if (self.complete) {
self.complete();
}
} onFailure:^(NSError *error) {
}];
//第二个网络请求 [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) {
NSLog(@"duihuan22");
requestCount++;
if (self.complete) {
self.complete();
}
} onFailure:^(NSError *error) {
}];
//第三个网络请求 [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) {
NSLog(@"duihuan33");
requestCount++;
if (self.complete) {
self.complete();
}
} onFailure:^(NSError *error) {
}];
self.complete = ^{
//请求网络的数量等于3表示三个网络请求已完成 if (requestCount == 3) {
//在这里 进行请求后的方法,回到主线程 dispatch_async(dispatch_get_main_queue(), ^{
//更新UI操作 });
}
};