У меня есть вопрос о цепочке дополнительных сетевых запросов (Alamofire), но число таких запросов иногда может быть 4, иногда 9 и c, это зависит от целевых конфигураций. У меня есть один view-контроллер панели управления, и что V C имеет 4-9 встроенных V C, каждый должен получить некоторые данные из API, и это проблема, все они пытаются получить «одновременно», но Многие из них не удается, случайно.
Я использую семафор для этой проблемы, но иногда запрос не удается, не знаю почему. Я думаю, что один запрос блокирует другой или что-то в этом роде.
Например, у меня есть:
let dispatchQueue = DispatchQueue.global(qos: .background)
dispatchQueue.async {
if MDUtilites.isMediaPresent() {
let _ = self.fetchMediaList()
self.semaphore.wait()
}
}
, и у меня есть около 10 блоков кодов, подобных этой и забавной c это:
func fetchMediaList() {
MDApiManager.sharedInstance.fetchMediaList { (dict, status) in
switch (status) {
case .failed(let code, _, let description):
print("failed:")
print(code)
print(description)
self.semaphore.signal()
case .success(_, _ , _):
print("success")
if let data = dict,
let list = data.parseWith(type: MediaBase.self)?.list {
self.newMedia = list
NotificationCenter.default.post(name: Notification.Name(rawValue: MEDIA_UPDATE), object: nil)
// self.mediaListSections = list
// self.getCategories(data: list)
}
self.semaphore.signal()
case .unknown:
print("DEBUG: unknown fetchMediaList")
self.fetchMediaList()
// self.semaphore.signal()
case .error(let aError):
print(aError)
self.semaphore.signal()
}
}
}
Может кто-нибудь помочь Чтобы решить эту проблему с большим количеством запросов одновременно, Semaphore иногда работает, иногда не