1.当异步执行的是同步执行
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, ^{
sleep(1);
NSLog(@"------------1");
dispatch_group_leave(group);
});
dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
sleep(1);
NSLog(@"------------2");
dispatch_group_leave(group);
});
dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
sleep(1);
NSLog(@"------------3");
dispatch_group_leave(group);
});
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);///一直等待完成
dispatch_group_notify(group, globalQueue, ^{
NSLog(@"执行完成");
});
2.当异步执行的是网络请求或另一个异步需要用dispatch_group_t、dispatch_queue_t、dispatch_semaphore_t才能实现异步执行
//使用GCD的信号量 dispatch_semaphore_t 创建同步请求
dispatch_group_t group =dispatch_group_create();
dispatch_queue_t globalQueue=dispatch_get_global_queue(0, 0);
dispatch_group_async(group, globalQueue, ^{
dispatch_semaphore_t semaphore= dispatch_semaphore_create(0);
//模拟网络多线程耗时操作
dispatch_group_async(group, globalQueue, ^{
sleep(3);
NSLog(@"%@---block1结束。。。",[NSThread currentThread]);
dispatch_semaphore_signal(semaphore);
});
NSLog(@"%@---1结束。。。",[NSThread currentThread]);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
});
dispatch_group_async(group, globalQueue, ^{
dispatch_semaphore_t semaphore= dispatch_semaphore_create(0);
//模拟网络多线程耗时操作
dispatch_group_async(group, globalQueue, ^{
sleep(3);
NSLog(@"%@---block2结束。。。",[NSThread currentThread]);
dispatch_semaphore_signal(semaphore);
});
NSLog(@"%@---2结束。。。",[NSThread currentThread]);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
});
dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
NSLog(@"%@---全部结束。。。",[NSThread currentThread]);
});