Завершение нескольких операций в OperationQueue, а не начало следующих - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть менеджер загрузок и 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 элементов, следующие не начинают загрузку.

...