Swift

oc和swift的DispatchGroupNotify

2021-10-28  本文已影响0人  SeanLink

话不多说,直接上代码吧

OC版本

- (void)requestDatasGroup {
    // 创建调度组
    dispatch_group_t group = dispatch_group_create();
    // 创建队列
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

    // 模拟异步发送网络请求 A
    // 入组
    dispatch_group_enter(group);
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"接口 A 数据请求完成");
        // 出组
        dispatch_group_leave(group);
    });
    
    // 模拟异步发送网络请求 B
    // 入组
    dispatch_group_enter(group);
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"接口 B 数据请求完成");
        // 出组
        dispatch_group_leave(group);
    });
    
    NSLog(@"我是最开始执行的,异步操作里的打印是后执行的");
    
    // 调度组的任务都执行完毕
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"接口 A 和接口 B 的数据请求都已经完毕!, 开始合并两个接口的数据");
    });
}

swift版本

  /// 网络请求调度组
    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 的数据请求都已经完毕!, 开始合并两个接口的数据")
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读