Вложенность 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, но это приводит к тому, что вложенный запрос никогда не выполняется - он ждет бесконечно долго для сигнала 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()