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

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

作者: alanim | 来源:发表于2019-02-26 11:29 被阅读0次
    需求:

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

    方案:

    这里我们需要使用信号量来控制一下新开辟的分线程数,同时使用 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】异步并发多任务 任务执行结束统一处理 (控制并发量)

          本文链接:https://www.haomeiwen.com/subject/pnaoyqtx.html