Ios Swift:链多网络请求,阿拉莫菲尔
我有一个关于链更多网络请求(Alamofire)的问题,但是请求的数量有时可能是4,有时是9等等,这取决于目标配置。 我有一个dashboard viewcontroller,VC有4-9个嵌入式VC,每个人都必须从API获取一些数据,这就是问题所在,所有人都试图“同时”获取数据,但很多人都随机失败 我使用信号量解决这个问题,但有时请求失败,不知道为什么。我认为一个请求阻止了另一个请求或类似的请求 例如,我有:Ios Swift:链多网络请求,阿拉莫菲尔,ios,swift,alamofire,Ios,Swift,Alamofire,我有一个关于链更多网络请求(Alamofire)的问题,但是请求的数量有时可能是4,有时是9等等,这取决于目标配置。 我有一个dashboard viewcontroller,VC有4-9个嵌入式VC,每个人都必须从API获取一些数据,这就是问题所在,所有人都试图“同时”获取数据,但很多人都随机失败 我使用信号量解决这个问题,但有时请求失败,不知道为什么。我认为一个请求阻止了另一个请求或类似的请求 例如,我有: let dispatchQueue = DispatchQueue.global(q
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()
}
}
}
如果有人能用更多的请求来解决这个问题,同时,信号量有时有效,有时无效
这是代码信号灯中的一些错误,它应该正常工作您不需要为您的请求使用
信号灯
。由于您的请求是异步执行的/相互独立的,因此根据请求的类型,执行需要时间。每个控制器
在将该请求加载到内存时获取该请求。在ViewDidLoad()
中获取它们。确保将多个控制器
正确地添加到父控制器
控制器
使用信号量通常是个坏主意。您可以使用DispatchGroup来处理多个并发请求的结束。使用notify更简单。您的API调用是并发的还是串行的??我的意思是API是相互依赖的,或者它们将独立执行。没有API是不依赖的。这就是为什么在3-4个嵌入式VC时,begin是这样的,但现在当我有7-9个API请求时,这是一个问题,有时它们中的一些只是进入失败状态,比如说它是后端问题,但事实并非如此。我将所有这些都放在一个单例类中,这样我就可以使用信号量,但没有luckCan可以尝试在每次命中时使用url会话来命中api,而不是Alomfire
。我的网络助手可以很好地工作,即使同时有10个或15个请求。在这方面不要尝试单例类。