iOS GCD

dispatch_group、dispatch_group_enter、dispatch_group_leave
只有一层异步任务,多个任务并发执行,完成后通知:

dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  for (int i = 0; i<10; i++) {
      NSLog(@"任务1 ==============  第%d个任务",i);
    }
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{      
  for (int i = 0; i<10; i++) {
    NSLog(@"任务2 ==============  第%d个任务",i);
  }
});        
dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  NSLog(@"完成");
});

输出结果:任务1、2执行不确定,但一定是两个都完成之后才会通知

注:如果任务里面又包含异步任务,这个通知会执行时间不定可能是任务1自行一次就通知,也可能2执行一次就通知,要想实现上面的效果,在任务1、2完成之后通知就需要用到
dispatch_group_enter和dispatch_group_leave
示例代码:

dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{       
  dispatch_group_enter(group); 
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{
    for (int i = 0; i<10; i++) {
      NSLog(@"任务1 ==============  第%d个任务",i);
    }
    dispatch_group_leave(group);
  });
});
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
  dispatch_group_enter(group);
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    for (int i = 0; i<10; i++) {
      NSLog(@"任务2 ==============  第%d个任务",i);
    }
    dispatch_group_leave(group);
   });
});
dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  NSLog(@"完成");
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • GCD笔记 总结一下多线程部分,最强大的无疑是GCD,那么先从这一块部分讲起. Dispatch Queue的种类...
    jins_1990阅读 4,160评论 0 1
  • 一、简单介绍下将会用到的一些东西 英语不好就不翻译官方文档了.. 1、dispatch_group_async S...
    Albert新荣阅读 5,717评论 0 1
  • 1、主线程队列 VS 分线程队列 dispatch_sync 和 dispatch_async 区别: dispa...
    瑞小萌阅读 4,496评论 4 7
  • 一. 重点: 1.dispatch_queue_create(生成Dispatch Queue) 2.Main D...
    BestJoker阅读 5,526评论 2 2
  • 1. 什么是GCD? GCD 是 libdispatch 的市场名称,而 libdispatch 作为 Appl...
    弦暮阅读 3,961评论 0 2

友情链接更多精彩内容