iOS 组任务

2020-04-05  本文已影响0人  EngineerPan
    /// 任务组(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执行结束");
    });
    /// 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执行结束");
    });
上一篇 下一篇

猜你喜欢

热点阅读