【发布时间】:2017-12-07 11:58:19
【问题描述】:
基本上我有一些 JSON 数据,我希望从一堆 URL(都来自同一个主机)中检索,但是我只能大约每 2 秒请求一次这些数据,并且一次只能请求一个,否则我会被服务器“时间禁止”。正如您将在下面看到的;虽然 URLSession 非常快,但当我有大约 700 个网址要通过时,它也几乎立即让我被禁止。
我将如何在 URLSession 中创建一个队列(如果它的功能支持它)并让它与我的主线程异步工作;它是否在自己的线程上连续工作,并且仅在完成上一个请求后 2 秒后才尝试队列中的每个项目?
for url in urls {
get(url: url)
}
func get(url: URL) {
let session = URLSession.shared
let task = session.dataTask(with: url, completionHandler: { (data, response, error) in
if let error = error {
DispatchQueue.main.async {
print(error.localizedDescription)
}
return
}
let data = data!
guard let response = response as? HTTPURLResponse, response.statusCode == 200 else {
DispatchQueue.main.async {
print("Server Error")
}
return
}
if response.mimeType == "application/json" {
do {
let json = try JSONSerialization.jsonObject(with: data) as! [String: Any]
if json["success"] as! Bool == true {
if let count = json["total_count"] as? Int {
DispatchQueue.main.async {
self.itemsCount.append(count)
}
}
}
} catch {
print(error.localizedDescription)
}
}
})
task.resume()
}
【问题讨论】:
标签: swift multithreading asynchronous networking swift4