我目前有一个字符串数组,其中包含大约三千个用于下载图像的网址。我已经设置了以下函数来将url数组传递到:
func downloadAllImages(urlArray:[String])->Void{
var urlArray = urlArray
let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)
var TotalProducts = urlArray.count
for i in 0 ..< urlArray.count {
Alamofire.download(
urlArray[i],
method: .get,
to: destination).downloadProgress(closure: { (progress) in
self.IndividualImage.text="\(progress.fractionCompleted*100)%"
}).response(completionHandler: { (DefaultDownloadResponse) in
TotalProducts-=1
self.DownloadLabel.text="Images left to download: \(TotalProducts)"
print("\(DefaultDownloadResponse.error)")
print("\(DefaultDownloadResponse.response)")
})
}
}
这样可以正常工作,但是在800-900图像之间下载并且停止之后它往往会被切断。它没有输出任何错误。当我循环遍历每个url并创建一个任务时,我想我只能同时执行很多并发任务。有什么想法吗?
更新
我已经完成了输出响应,发现很多都是超时的:
Optional(Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x60800145b840 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=www.MYURL.com/image1.jpg, NSErrorFailingURLKey=www.MYURL.com/image1.jpg, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.})
所以这很明显,因为for循环将所有内容一次性地发送到任务,然后它只能同时处理这么多。所以答案是分批发送。但是,我如何发送一批50,然后等待每个任务完成,然后发送另一个波?