【iOS】异步并发多任务 任务执行结束统一处理 (控制并发量)

需求:

异步并发执行多任务 ,任务执行结束统一处理

方案:

这里我们需要使用信号量来控制一下新开辟的分线程数,同时使用 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(@"---------------全部请求完成");
    });
}

【iOS】dispatch_semaphore(信号量)

你可能感兴趣的:(【iOS】异步并发多任务 任务执行结束统一处理 (控制并发量))