Я хочу загрузить несколько файлов, например, 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
, потому что он позволяет запускать одну задачу загрузки одновременно время.