在OperationQueue中完成一些操作,不会开始下一个操作

时间:2018-11-27 12:11:21

标签: swift nsoperationqueue

我有一个下载管理器和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个项目调用此方法时,接下来的项目不会开始下载。

0 个答案:

没有答案