我在使用以下模式时遇到问题。我需要同步等待初始异步请求,其中完成块依次调用异步调用列表,其中每个异步调用需要等待前一个异步调用结束才能开始。
下面的代码将一次调用所有嵌套请求,这不是我想要的。
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 循环中添加另一个信号量,但这具有嵌套请求永远不会执行的效果 - 它无限期地等待从未发生过的 semaphore2 信号。我该如何解决?
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()