swift 网络请求调度组GCD版

/// 网络请求调度组
private func datasRequestGroup() {
// 创建调度组
let workingGroup = DispatchGroup()
// 创建多列
let workingQueue = DispatchQueue(label: "request_queue")

    // 模拟异步发送网络请求 A
    // 入组
    workingGroup.enter()
    workingQueue.async {
        Thread.sleep(forTimeInterval: 1)
        print("接口 A 数据请求完成")
        // 出组
        workingGroup.leave()
    }
    
    // 模拟异步发送网络请求 B
    // 入组
    workingGroup.enter()
    workingQueue.async {
        Thread.sleep(forTimeInterval: 1)
        print("接口 B 数据请求完成")
        // 出组
        workingGroup.leave()
    }
    
    print("我是最开始执行的,异步操作里的打印后执行")
    
    // 调度组里的任务都执行完毕
    workingGroup.notify(queue: workingQueue) {
        print("接口 A 和接口 B 的数据请求都已经完毕!, 开始合并两个接口的数据")
    }
}

1.如果调度组 group 中没有任务,会直接执行 dispatch_group_notify 方法
2.入组 dispatch_group_enter 、 出组 dispatch_group_leave 必须成对出现
3.当入组多于出组,dispatch_group_notify 方法永远不会执行
4.当出组多于入组,会崩溃

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法。这大概是史上最详细、清晰的关于 GCD 的详细讲...
    花花世界的孤独行者阅读 524评论 0 1
  • iOS多线程编程 基本知识 1. 进程(process) 进程是指在系统中正在运行的一个应用程序,就是一段程序的执...
    陵无山阅读 6,122评论 1 14
  • 一、简单介绍下将会用到的一些东西 英语不好就不翻译官方文档了.. 1、dispatch_group_async S...
    Albert新荣阅读 1,777评论 0 1
  • 01. 由北京中视文公文化传媒有限公司、苏宁环球传媒有限公司出品,陈为军执导的纪录片电影《生门》片中讲了四位产妇在...
    独行的狐阅读 823评论 1 3
  • 岁月从山的这一头跳到另一头,这中间隔着的千山万水,也不过是沧海一粟。只是,在这人世间,总有时间带不走的东西。这一种...
    静默如初_c911阅读 1,452评论 2 5