设置maxConcurrentOperationCount为1,OperationQueue是否会变为串行队列?
OperationQueue设置maxConcurrentOperationCount为1是否会变成串行队列?
我需要在后台线程中逐个上传数组数据,因此使用OperationQueue进行后台上传,对NSOperation进行子类化并实现了post方法。我需串行而非并行地上传数据包,因此编写了以下代码:
private var uploadQueue = OperationQueue() self.uploadQueue.maxConcurrentOperationCount = 1 self.uploadQueue.addOperation(newOperation)请问将maxConcurrentOperationCount设置为1后,该队列是否会成为串行队列?
是的,当你把OperationQueue的maxConcurrentOperationCount属性设置为1时,这个队列就会严格以串行方式执行添加进去的操作。
具体来说:
- 队列会按照你添加操作的顺序,每次只执行一个
NSOperation任务,前一个操作完全完成后,才会启动下一个任务。 - 这种配置完美匹配你“逐个上传数据包”的需求,能确保上传任务不会并行触发,避免并发上传可能带来的请求顺序混乱、服务器冲突等问题。
不过有个小细节需要留意:如果你子类化的NSOperation里的post方法是异步任务(比如用到了URLSession的异步请求),那你必须正确重写isFinished、isExecuting这些状态属性,并在任务完成时发送KVO通知。否则OperationQueue可能会误判操作已完成,提前启动下一个任务,导致看似并行的异常情况。如果你的post是同步执行的,那这个问题就不存在啦。
内容的提问来源于stack exchange,提问作者Ravi Kiran
相关产品推荐
相关产品推荐

