dispatch_group嵌套异步函数的正确使用

举个栗子:异步请求A图片和B图片和C图片,在最后合成ABC图

-(void)group{
    dispatch_group_t group = dispatch_group_create();
    
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
       //这里走了个异步函数,该函数不等里边请求完毕就返回
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
             sleep(3);
             NSLog(@"A图片");
        });
       
        
    });
    
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
        NSLog(@"B图片");
        
    });
    
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
        NSLog(@"C图片");
        
    });
    
    
    dispatch_notify(group, dispatch_get_main_queue(), ^{
        
        NSLog(@"合成图");
        
    });
}
//打印顺序:

2018-04-06 16:01:16.960640+0800 COCOCOCO[13546:578928] B

2018-04-06 16:01:16.960675+0800 COCOCOCO[13546:578926] C

2018-04-06 16:01:16.961241+0800 COCOCOCO[13546:578877] D

2018-04-06 16:01:19.964354+0800 COCOCOCO[13546:578930] A

正确写法:

-(void)rightGroup{
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_enter(group);
//这里不一定用dispatch_group_async,也可以dispatch_async
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
       
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
             sleep(3);
             NSLog(@"拿到A图片");
             dispatch_group_leave(group);
        });
       
        
    });
    
     dispatch_group_enter(group);
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
         sleep(2);
        NSLog(@"拿到B图片");
         dispatch_group_leave(group);
    });
    
     dispatch_group_enter(group);
    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
         sleep(1);
        NSLog(@"拿到C图片");
         dispatch_group_leave(group);
    });
    
    
    dispatch_notify(group, dispatch_get_main_queue(), ^{
        
        NSLog(@"合成D图片");
        
    });
}
打印:
2018-04-06 16:11:40.070776+0800 COCOCOCO[13688:585282] 拿到C图片
2018-04-06 16:11:41.072284+0800 COCOCOCO[13688:585280] 拿到B图片
2018-04-06 16:11:42.071223+0800 COCOCOCO[13688:585279] 拿到A图片
2018-04-06 16:11:42.071636+0800 COCOCOCO[13688:585221] 合成D图片

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值