在 Swift 3.0 中使用 URLSessionDownloadTask 时,多个下载不起作用

Multilple Downloads not working while using URLSessionDownloadTask in Swift 3.0

我正在尝试使用会话下载任务下载多个文件并发生以下情况:

  1. 第一次下载开始。我猜它会创建一个临时文件,例如 CFNetworkDownload_Kx54Ke.tmp.

  2. 第二次下载开始后不久,顺便说一句,它使用了相同的会话对象,但使用了不同的下载任务对象。

  3. 我看到我的第一个下载停止并出现以下错误:

    __NSCFLocalDownloadFile:打开 ioChannel 错误 2,文件:/private/var/mobile/Containers/Data/Application/E88FD72B-AB73-402E-B264-D5827BA2023C/tmp/CFNetworkDownload_Kx54Ke.tmp

  4. 然而,我的第二次下载没有出现任何问题。

我的会话代码。我只是将 URL 传递给此方法,并且会话在应用程序的生命周期中仅创建一次:

//creating session only once in the app life cycle

init() {

    super.init()
    let configuration = URLSessionConfiguration.default
    self.session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
    }

//calling download method from my viewcontroller
func download(url : URL ){
let request = URLRequest(url: url)
            let downloadTask : URLSessionDownloadTask

                 downloadTask  = self.session!.downloadTask(with: request)


            downloadTask.resume()
}

更新: 在操作队列块中调用每个不同的下载操作有效,我可以看到下载是并行的。但是,我仍然想确认在 urlsessiondownload 任务中 Swift 3 是否会出现这种行为。

我发现了问题。这对我来说是一个愚蠢的错误。我在每次下载调用时都清除了临时目录。首先下载清除临时目录并创建一个临时文件。第二次下载调用清除临时目录,包括第一次下载的临时文件。

我不得不将清除临时目录调用移动到只调用一次的位置。