我想同时下载一些文件,比如100个。所以我决定将我的下载线程添加到调度队列中,GCD会调整同时运行的线程数。
问题在于:在dispatch_async
的块被立即完成,因为task
会在另一个线程上运行。所以,如果urls
的长度是100,它会立即创建100个线程。
var queueDownloadTask = dispatch_queue_create("downloadQueue", nil)
for url in urls {
dispatch_async(queueDownloadTask) {
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let fileTransferSession = NSURLSession(configuration: config)
let task = fileTransferSession.downloadTaskWithURL(url, completionHandler: { (responseUrl, response, error) -> Void in
println("completed")
})
task.resume()
}
}
如何配置 dispatch_async
中的块,以等待下载任务完成?我不想使用 dispatch_semaphore
,因为它只允许同时运行一个下载任务。