我有一个关于链接更多网络请求(Alamofire)的问题,但是请求的数量有时可以是4,有时是9等等,这取决于目标配置。我有一个仪表板视图控制器,VC有4-9个嵌入式VC,每个人都必须从API中获取一些数据,这就是问题所在,所有人都试图“同时”获取,但它们中的许多都随机失败了。
我使用信号量来解决这个问题,但有时请求会失败,不确定原因。我认为一个请求阻止了另一个或类似的东西。
举个例子,我有:
let dispatchQueue = DispatchQueue.global(qos: .background)
dispatchQueue.async {
if MDUtilites.isMediaPresent() {
let _ = self.fetchMediaList()
self.semaphore.wait()
}
}我有大约10个这样的代码块,func是:
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()
}
}
}有没有人可以同时用更多的请求来帮助解决这个问题,信号量有时工作,有时不起作用。
这是代码中的一些bug,信号量应该正常工作
发布于 2020-01-10 17:50:25
你不需要为你的请求使用semaphore。由于您的请求是异步/独立执行的,因此根据请求类型的不同,执行需要时间。当这个请求加载到内存中时,您的每个controller都会获取它。在ViewDidLoad()中获取它们。确保正确地将多个controllers添加到parent controller中。
https://stackoverflow.com/questions/59678917
复制相似问题