问题描述
我需要下载大量文件-以前一次只能下载一个文件。当前的设计是,当用户下载单个文件时,将创建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 (将#修改为@)