多个网络请求中GCD信号量的使用
2017-05-08 本文已影响64人
行走的风车
//信号量
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
//创建全局并行
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//任务一
dispatch_group_async(group, queue, ^{
[self getAdvertList:^{ //这个block是此网络任务异步请求结束时调用的,代表着网络请求的结束.
//一个任务结束时标记一个信号量
dispatch_semaphore_signal(semaphore);
}];
});
//任务二
dispatch_group_async(group, queue, ^{
[self getHotCultureList:^{
dispatch_semaphore_signal(semaphore);
}];
});
//任务三
dispatch_group_async(group, queue, ^{
[self getSurroundCulture:^{
dispatch_semaphore_signal(semaphore);
}];
});
//任务四
dispatch_group_async(group, queue, ^{
[self getMySubscibe:^{
dispatch_semaphore_signal(semaphore);
}];
});
//任务五
dispatch_group_async(group, queue, ^{
[self getRecommendCulture:^{
dispatch_semaphore_signal(semaphore);
}];
});
//任务六
dispatch_group_async(group, queue, ^{
[self getNews:^{
dispatch_semaphore_signal(semaphore);
}];
});
dispatch_group_notify(group, queue, ^{
//6个任务,6个信号等待.
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
//这里就是所有异步任务请求结束后执行的代码
[self.homeTableView.mj_header endRefreshing];
});
-(void)getAdvertList:(void(^)())finish{
//网络请求..成功后调用一下finish,失败也调用finish
}