需求:
异步并发执行多任务 ,任务执行结束统一处理
方案:
这里我们需要使用信号量
来控制一下新开辟的分线程数,同时使用 dispatch_group_t
做并发任务结束后统一操作的处理。
- (void)test22 {
dispatch_queue_t scheduleQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t scheduleGroup = dispatch_group_create();
dispatch_semaphore_t semaphore = dispatch_semaphore_create(4);//初始并发量为4
NSLog(@"----------------最前面");
for (int i = 0; i < 7; i++)
{
dispatch_group_async(scheduleGroup, scheduleQueue, ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); //占用一个并发数
dispatch_group_enter(scheduleGroup); //进入组
NSLog(@"----------前面------%i", i);
[BYNetPort requestFileSettingsSuccess:^(id responseObject) {
NSLog(@"--------succeesCount--: %i",i);
dispatch_semaphore_signal(semaphore); //解除占用的并发数
dispatch_group_leave(scheduleGroup); //离开组
} failure:^(NSError *error) {
NSLog(@"--------succeesCount--: %i",i);
dispatch_semaphore_signal(semaphore);
dispatch_group_leave(scheduleGroup);
}];
});
}
dispatch_group_wait(scheduleGroup, DISPATCH_TIME_FOREVER); //等待组中的任务执行
///组中所有任务完成后收到的回调
dispatch_group_notify(scheduleGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"---------------全部请求完成");
});
}