1

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

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

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()
4

0 回答 0