Множество загрузок приводит к тому, что Request имеет тайм-аут ошибки с OperationQueue

57
4

Мне нужно сделать около 278 звонков на сервер, и, похоже, он работает в течение первых 50-100 или около того, но все вызовы после получения запроса имеют временные ошибки. Я использую OperationQueue. Может ли кто-нибудь увидеть, что я делаю неправильно, или сказать, как я могу сделать это правильно и эффективно? Я уже попробовал добавить waitUntilFinished, установив maxConcurrentOperationCount = 1 и используя семафор, который просто замораживает приложение. Если есть другой способ, я бы хотел это услышать.

for ID in IDs {
guard let url = URL(string: baseURL + APIurl.kURL + "/" + ID) else {
return
}

if let headers = getHeaders() {
let operationQueue: OperationQueue = OperationQueue()

let operation1 = BlockOperation() {
RequestManager().makeRequest(withURL: url, headers: headers) { (response, error) in
if error != nil {
print("error downloading \(String(describing: url))")
print("errorDesc \(String(describing: error?.localizedDescription))")
}
guard let results = response else {
return
}
print("downloaded \(url)")
// save to core data
}
}
operationQueue.addOperation(operation1)
}
}
}

и RequestManager - это вызов с использованием AlamoFire и SwiftyJSON

func makeRequest(withURL url:URL, headers: [String:String], completion: @escaping RequestCompletion) {

Alamofire.request(url, method: .get, encoding: JSONEncoding.prettyPrinted, headers: headers).responseJSON { response in

guard response.result.error == nil, response.result.value != nil else {
completion(nil, response.result.error)
return
}

switch (response.result) {
case .success:
if let resultValue = response.result.value {
let json = JSON(resultValue)
completion(json, nil)
}
break
case .failure(let error):
print("error - > \n \(error.localizedDescription) \n")
completion(nil, error)
break
}
}
}

спросил(а) 2017-11-26T02:45:00+03:00 2 года, 10 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема