嵌套调度信号量

时间:2019-04-23 09:12:29

标签: swift macos synchronous dispatchsemaphore

我在使用以下模式时遇到麻烦。我需要同步等待初始的异步请求,其中完成块依次调用一系列异步调用,其中每个异步调用都需要等待上一个异步调用结束才能开始。

下面的代码将立即调用所有嵌套的请求,这不是我想要的。

let semaphore = DispatchSemaphore.init(value: 0)
self.getThings { (things) -> (Void) in
    for thing in things {
        self.getSomething { (somevalue) -> (Void) in
        }
    }
    semaphore.signal()
}
semaphore.wait()

因此,我尝试过的是在for循环内添加另一个信号量,但这具有以下作用:永远不会执行嵌套请求-它无限期地等待信号2永远不会发生。我该如何解决?

let semaphore = DispatchSemaphore.init(value: 0)
self.getThings { (things) -> (Void) in
    for thing in things {
        let semaphore2 = DispatchSemaphore.init(value: 0)
        self.getSomething { (somevalue) -> (Void) in
            semaphore2.signal()
        }
        semaphore2.wait()
    }
    semaphore.signal()
}
semaphore.wait()

0 个答案:

没有答案