美文网首页iOS干货
dispatch_group_async队列组实现多线程异步操作

dispatch_group_async队列组实现多线程异步操作

作者: Jean_Lina | 来源:发表于2020-07-06 15:01 被阅读0次

    分别异步执行2个耗时任务,然后当2个耗时任务都执行完毕后再回到主线程执行任务。这时候可以用到 GCD 的队列组。

    1. 调用队列组的 dispatch_group_async先把任务放到队列中,然后将队列放入队列组中。或者使用队列组的 dispatch_group_enter、dispatch_group_leave组合 来实现dispatch_group_async。
    2. 当所有任务都执行完成之后,才执行dispatch_group_notify block 中的任务。
    #pragma mark dispatch_group_async
    - (void)gcd_dispatch_group {
        // 打印当前线程
        NSLog(@"currentThread---%@",[NSThread currentThread]);
        NSLog(@"group---begin");
        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, ^{
            // 追加任务1
            for (int i = 0; i < 2; ++i) {
                //模拟耗时操作
                [NSThread sleepForTimeInterval:2];
                //打印当前线程
                NSLog(@"1---%@",[NSThread currentThread]);
            }
        });
        
        dispatch_group_async(group, queue, ^{
            // 追加任务2
            for (int i = 0; i < 2; ++i) {
                //模拟耗时操作
                [NSThread sleepForTimeInterval:2];
                //打印当前线程
                NSLog(@"2---%@",[NSThread currentThread]);
            }
        });
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            //等前面的异步任务1、任务2都执行完毕后,回到主线程执行下边任务
            NSLog(@"任务1、任务2都执行完毕");
            for (int i = 0; i < 2; ++i) {
                // 模拟耗时操作
                [NSThread sleepForTimeInterval:2];
                // 打印当前线程
                NSLog(@"3---%@",[NSThread currentThread]);
            }
            NSLog(@"group---end");
        });
        NSLog(@"code---end");
    }
    
    屏幕快照 2020-07-06 下午2.14.57.png

    相关文章

      网友评论

        本文标题:dispatch_group_async队列组实现多线程异步操作

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