iOS 串行任务

2021-02-01  本文已影响0人  张科_Zack

Queuer

Queue (https://github.com/FabrizioBrancati/Queuer) 第三方库对 Operation 的封装,使用起来比较方便。
这里用串行执行网络请求作为一个事例。

基本实现

class NetWorkOperation: ConcurrentOperation {
    var dataTask:URLSessionDataTask?
    override func start() {
        if isCancelled {
            self.finish()
        }
        dataTask?.resume()
    }
}
    @objc let countryOperationQueue = OperationQueue()
    countryOperationQueue.maxConcurrentOperationCount = 1;


 var urlRequest = URLRequest(url:"https://www.baidu.com")
let networkOperation = NetWorkOperation()
let dataTask = URLSession.shared.dataTask(with: urlRequest) { data, response, _ in
        networkOperation.finish()

}
networkOperation. dataTask = dataTask
networkOperation.addOperation(networkOperation)

 var urlRequest1 = URLRequest(url:"https://www.jianshu.com")
let networkOperation1 = NetWorkOperation()
let dataTask1 = URLSession.shared.dataTask(with: urlRequest1) { data, response, _ in
        networkOperation.finish()

}
networkOperation. dataTask = dataTask1
networkOperation.addOperation(networkOperation1)

这样就可以初步实现串行任务了。

Operation 任务结束的监听

使用 KVO 实现 Operation 监听,主要是对 OperationQueue 属性的监听。

 var obseration: NSKeyValueObservation?
        obseration = observe(\.countryOperationQueue.operations, options: [.new]) { (object, change) in
            // 2. Migrate Languages
            if change.newValue?.count == 0 {
                 // 任务结束
            }

        }

实现过程如有疑问可以私信我。

上一篇下一篇

猜你喜欢

热点阅读