我有一个下载管理器和OperationQueue,其中maxCount为3,当我开始下载大约20个项目时,它成功地按3下载了3,并且当我从那3中取消任何人时,下一个开始。但是,当我取消前5-6个项目时,下一个项目不会开始下载。这是我的代码。
private let queue: OperationQueue = {
let _queue = OperationQueue()
_queue.name = "download"
_queue.maxConcurrentOperationCount = 3
return _queue
}()
这是用于存储当前操作的字典
fileprivate var operations = [Int: DownloadOperation]()
这是我创建操作的方式
let operation = DownloadOperation(session: downloadTask)
operations[operation.task.taskIdentifier] = operation
queue.addOperation(operation)
这是取消方法
public func cancelDownload(forUniqueKey key:String?) {
let downloadStatus = self.isDownloadInProgress(forUniqueKey: key)
let presence = downloadStatus.0
if presence {
if let download = downloadStatus.1 {
operations[download.downloadTask.taskIdentifier]?.finish()
operations[download.downloadTask.taskIdentifier] = nil
ongoingDownloads.removeValue(forKey: key!)
}
}
}
当我在for循环中针对前4-6个项目调用此方法时,接下来的项目不会开始下载。