串行异步操作队列

什么是OperationQueue

从Apple文档

操作队列 根据它们的优先级和准备情况 执行其排队的 Operation 对象。 在将操作添加到操作队列之后,该操作将保留在其队列中,直到它报告完成任务为止。 添加操作后,您无法直接从队列中删除该操作。

OperationQueue具有一个名为maxConcurrentOperationCount的属性,您可以将其设置为1,以使串行 OperationQueue在操作为同步操作时可以完美地工作。

问题

当我想要将其发送到蓝牙时,检测到传感器框架之间存在干扰。 发生了什么事!🤔我们使用很多“ @synthesize”关键字来确保线程安全并防止传感器线程之间的任何干扰。 然后我寻找最佳解决方案,最后我找到了maxConcurrentOperationCount
I 那就是我需要的,它将解决我的问题

我开始重构1Sheeld的代码以使用maxConcurrentOperationCount. 不幸的是,干扰仍然发生。 我相信在文档中只能同时执行一个操作,但这并不是为什么。

如果操作同步,则 maxConcurrentOperationCount 可以完美地工作,但是如果该操作是异步的(例如调用API请求或使用蓝牙发送数据),则该操作将无用。

那简单的代码显示了问题

创建操作