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