美文网首页
dispatch_group

dispatch_group

作者: AntKing | 来源:发表于2017-03-27 13:06 被阅读0次
  • 方式1

    dispatch_queue_t dispatchQueue = dispatch_queue_create("ted.queue.next", DISPATCH_QUEUE_CONCURRENT);
    dispatch_group_t dispatchGroup = dispatch_group_create();
    dispatch_group_async(dispatchGroup, dispatchQueue, ^(){
        NSLog(@"dispatch-1");
    });
    dispatch_group_async(dispatchGroup, dispatchQueue, ^(){
        NSLog(@"dspatch-2");
    });
    dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^(){
        NSLog(@"end");
    });

因为是异步并发执行,所以dispatch-1,dspatch-2,顺序是不固定的,但是end肯定是在dispatch-1,dspatch-2,都执行完成之后才执行

  • 方式2
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_enter(group);
    
    NSLog(@"1111");
    NSLog(@"2222");
    
    dispatch_group_leave(group);
    
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"3333");
    });

  • 方式3
    // 因为 dispatch_group_wait 会阻塞线程,所以创建一个新的线程,用来完成任务
    // 同时用异步的方式向新线程(tasksQueue)中添加任务
    dispatch_queue_t tasksQueue = dispatch_queue_create("tasksQueue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(tasksQueue, ^{
        // 真正用来完成任务的线程
        dispatch_queue_t performTasksQueue = dispatch_queue_create("performTasksQueue", DISPATCH_QUEUE_CONCURRENT);
        dispatch_group_t group = dispatch_group_create();
        for (int i = 0; i < 3; i++) {
            // 入组之后的 block 会被 group 监听
            // 注意:dispatch_group_enter 一定和 dispatch_group_leave 要配对出现
            dispatch_group_enter(group);
            dispatch_async(performTasksQueue, ^{
                NSLog(@"开始第 %zd 项任务", i);
                [NSThread sleepForTimeInterval:(3 - i)];
                dispatch_group_leave(group);
                NSLog(@"完成第 %zd 项任务", i);
            });
        }
        //dispatch_group_wait会阻塞主线程,所以在异步并发的子线程里用
        dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"全部任务完成");
        });
    });

相关文章

网友评论

      本文标题:dispatch_group

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