Обычно я могу использовать DispatchGroup
для отслеживания задач в нескольких задачах Диспетчеризации. Но чтобы убедиться, что DispatchGroup
работает правильно, метод group.notify
должен вызываться после того, как все group.enter
вызваны для всех task
s.
На данный момент у меня есть вопрос: у меня рекурсия, и в рекурсии это создает больше task
с, я хочу убедиться, что все tasks
выполнены. Как я упоминал ранее, DispatchGroup.notify
не будет работать должным образом, если он вызывается раньше, чем все group.enter
. В этом случае рекурсии вы не будете знать, когда был последний group.enter
вызов.
Упрощенный пример:
func findPath(node: Node) {
if !node.isValid { return }
queue.async { //concurrent queue
findPath(node.north)
}
queue.async {
findPath(node.west)
}
queue.async {
findPath(node.south)
}
queue.async {
findPath(node.east)
}
}
Это самый простой пример, в моем случае гораздо больше асинхронных блоков, таких как выборка изображений, вызов API сети и т. Д. Как бы я мог убедиться, что функция findPath
в этом примере будет полностью завершена всеми задач из очереди отправки?