您可以尝试创建串行队列
let que = DispatchQueue(label: "custQ")
for url in urls {
que.sync {
quota += 1;
while quota > 5 { }
networkRequest (url: url, callback: { json in
quota -= 1
results[url.absoluteString] = json
})
}
}
但注意
networkRequest
应该在同一个队列线程中运行,不要调度它,或者递归地调用它
var counter = 0
func callUrl(_ url:URL) {
quota += 1;
while quota > 5 { }
networkRequest (url: url, callback: { json in
self.quota -= 1
self.results[url.absoluteString] = json
self.counter +=1
if self.counter < 20 { /// or set any number
self.callUrl(urls[counter])
}
})
}