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执行结束");
});
- 组任务中 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执行结束");
});