Я не думаю, что ваша основная очередь заблокирована, иначе вы, вероятно, имели бы бесконечную загрузку в вашем приложении, как если бы оно падало (в MacOS это точно).
Вот что сработало для меня, может быть, это поможет:
class func synchronize(completion: @escaping (_ error: Bool) -> Void) {
DispatchQueue.global(qos: .background).async {
// Background Thread
var error = false
let group = DispatchGroup()
synchronizeObject1(group: group){ error = true }
synchronizeObject2(group: group){ error = true }
synchronizeObject3(group: group){ error = true }
group.wait() // will wait for everyone to sync
DispatchQueue.main.async {
// Run UI Updates or call completion block
completion(error)
}
}
}
class func synchronizeObject1(group: DispatchGroup, errorHandler: @escaping () -> Void){
group.enter()
WebservicesController.shared.getAllObjects1() { _ in
// Do My stuff
// Note: if an error occures I call errorHandler()
group.leave()
}
}
Если бы я сказал, это может прийти от queue.sync
вместо queue.async
.Но я не эксперт по асинхронным вызовам.
Надеюсь, это поможет