Например, у меня есть массив URL для получения данных JSON.Количество списков может достигать тысяч.Тогда не имеет значения, что у меня есть цикл для извлечения данных json из каждого элемента.
let urls : [URL] = getUrls();
var results = [String: Dictionary]();
for url in url {
networkRequest (url: url, callback: { json in
results[url.absoluteString] = json;
});
}
Проблема в том, что все эти запросы выполняются одновременно, поэтому результаты выполняются либо очень медленно, либочастично отсутствует.
Так что я подумал, что это потому, что запрос выполнялся слишком много одновременно.Поэтому я хочу добавить некую квоту сетевого вызова для запуска.
let urls : [URL] = getUrls();
var results = [String: Dictionary]();
var quota = 0;
for url in url {
quota += 1;
while quota > 5 { }
networkRequest (url: url, callback: { json in
quota -= 1;
results[url.absoluteString] = json;
});
}
Используя печатное консольное сообщение, я вижу, что первые 5 сетевых вызовов были переданы функции networkRequest, но они никогда не возвращалисьданные.Обратный звонок никогда не перезванивался.Как мне реализовать этот вызов квоты?