iOS 多个网络请求 结果有依赖 完成后执行某一操作

目标:

请求要求串行要达到顺序执行,结果顺序返回。先请求先返回。

实现思路:

使用DispatchQueue 或者DispatchGroup 都可以实现顺序执行,但是并没有做到结果按照请求的顺序顺序返回。
如果你再第二个接口想要利用第一个接口返回的数据,那单独使用队列或者队列组是达不到了。还需要结合信号量。

信号量简介

dispatch_semaphore_create(M)// 创建一个值为M的信号量
dispatch_semaphore_wait(信号量,等待时间)//如果该信号量的值大于0,则使其信号量的值-1,否则,阻塞线程直到该信号量的值大于0或者达到等待时间。
dispatch_semaphore_signal(信号量)//释放信号量,使得该信号量的值加1

代码实例

func dispatchSemaphore () {
    let group = DispatchGroup()
    let serialQueue = DispatchQueue(label: "request_queue")
    group.enter() // 开始
    serialQueue.async {
        let sema = DispatchSemaphore(value: 0)
        self.requestO(sema: sema)
        print("11")
        sema.wait() // 等待任务结束, 否则一直阻塞
        group.leave() // 结束
    }

    group.enter() // 开始
    serialQueue.async {
        let sema = DispatchSemaphore(value: 0)
        print("12")
        self.requestT(sema: sema)
        sema.wait() // 等待任务结束, 否则一直阻塞
        group.leave() // 结束
    }

    group.notify(queue: DispatchQueue.main) {
        // 全部调用完成后回到主线程,更新UI
    }
    // 让信号量 +1, 当>0时就代表绿灯可以走了
}

fileprivate func requestO(sema: DispatchSemaphore) {
    print("1")
    sema.signal()


}

fileprivate func requestT(sema: DispatchSemaphore) {
    print("2")
    sema.signal()
}

你可能感兴趣的:(iOS 多个网络请求 结果有依赖 完成后执行某一操作)