GCD:URLSession下载任务

问题描述

我需要下载大量文件-以前一次只能下载一个文件。当前的设计是,当用户下载单个文件时,将创建URLSession任务,并使用urlsession的委托方法记录进度/完成/失败。我的问题是,如何在此委托方法中保留调度组?我需要一次下载10个文件,在前十个文件完成后再开始下一个10个文件。现在,如果我将派遣组保留在委托方法中,则派遣组的等待将永远等待。到目前为止,这是我已经实现的:

self.downloadAllDispatchQueue.async(execute: {
    self.downloadAllDispatchGroup = DispatchGroup()
    let maximumConcurrentDownloads: Int = 10
    var concurrentDownloads = 0
    for i in 0..<files.count
    {
        if self.cancelDownloadAll {
            return
        }
            if concurrentDownloads >= maximumConcurrentDownloads{
                self.downloadAllDispatchGroup.wait()
                concurrentDownloads = 0
            }
            if let workVariantPart = libraryWorkVariantParts[i].workVariantPart {
                concurrentDownloads += 1
                self.downloadAllDispatchGroup.enter()
                //call method for download
            }
    }
    self.downloadAllDispatchGroup!.notify(queue: self.downloadAllDispatchQueue,execute: {
        DispatchQueue.main.async {
            
        }
    })
})

在代表中:

func downloadDidFinish(_ notification: Notification){
        if let dispatchGroup = self.downloadAllDispatchGroup {
            self.downloadAllDispatchQueue.async(execute: {
                dispatchGroup.leave()
            })
        }
}

这甚至可能吗?如果没有,我该如何实现?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)