美文网首页
iOS 组任务

iOS 组任务

作者: EngineerPan | 来源:发表于2020-04-05 14:14 被阅读0次
  • 组任务中执行的任务可以处于不同队列中;
    /// 任务组(1和(2,3)并行执行,2,3串行执行,4最后执行)
    /// 创建异步队列
    dispatch_queue_t conCurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    /// 创建同步队列
    dispatch_queue_t serialQueue = dispatch_queue_create(DISPATCH_QUEUE_PRIORITY_DEFAULT, DISPATCH_QUEUE_SERIAL);
    /// 创建任务组
    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, conCurrentQueue, ^{
        NSLog(@"任务1开始执行");
        sleep(2);
        NSLog(@"任务1执行结束");
    });

    dispatch_group_async(group, serialQueue, ^{
        NSLog(@"任务2开始执行");
        sleep(2);
        NSLog(@"任务2执行结束");
    });

    dispatch_group_async(group, serialQueue, ^{
        NSLog(@"任务3开始执行");
        sleep(2);
        NSLog(@"任务3执行结束");
    });

    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"任务4开始执行");
        sleep(2);
        NSLog(@"任务4执行结束");
    });
  • 组任务中 dispatch_group_enter() 和 dispatch_group_leave() 的配合使用
    /// 3个异步任务,1、2、3,当3个任务都执行完毕,然后再执行任务4
    dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_group_t group = dispatch_group_create();

    dispatch_group_enter(group);
    dispatch_group_async(group, globalQueue, ^{
        NSLog(@"任务1开始执行");
        sleep(2);
        NSLog(@"任务1执行结束");
        dispatch_group_leave(group);
    });

    dispatch_group_enter(group);
    dispatch_group_async(group, globalQueue, ^{
        NSLog(@"任务2开始执行");
        sleep(2);
        NSLog(@"任务2执行结束");
        dispatch_group_leave(group);
    });

    dispatch_group_enter(group);
    dispatch_group_async(group, globalQueue, ^{
        NSLog(@"任务3开始执行");
        sleep(2);
        NSLog(@"任务3执行结束");
        dispatch_group_leave(group);
    });

    /// 等待前面的任务都执行结束
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

    /// 当前面的任务都执行完毕之后最后执行任务4
    dispatch_group_notify(group, globalQueue, ^{
        NSLog(@"任务4开始执行");
        sleep(2);
        NSLog(@"任务4执行结束");
    });

相关文章

网友评论

      本文标题:iOS 组任务

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