ios - 在 Swift 中使用 DispatchQueue 进行同步处理
问题描述
我有一种方法可以处理我从服务器收到的事件。可以从不同类的多个位置调用该方法。我想使用 DispatchQueue/Serial Queue 同步事件的处理以丢弃多个调用中的重复事件。我知道调度队列以及它是如何工作的,但我无法为我的问题找到最佳解决方案。
实现:通过同步我想确保顺序处理,丢弃重复的事件。
func process(events:[Events]) {
// by synchronizing I want to ensure sequential processing, to discard duplicate events
for event in events {
// process, save to db,
}
// issue notifications, etc
}
class A {
process(events)
}
class B {
process(events)
}
任何帮助表示赞赏。谢谢!
解决方案
尝试这样的事情:
class Event {
let id: String = ""
}
class EventManager {
static let shared = EventManager()
private let processQueue = DispatchQueue(label: "processQueue")
private var processedEvents = [Event]()
private init() {}
func process(events:[Event]) {
processQueue.async { [unowned self] in
for event in events {
if !self.processedEvents.contains(where: { $0.id == event.id }) {
// process, save to db,
self.processedEvents.append(event)
}
}
// issue notifications, etc
}
}
}
推荐阅读
- bash - 仅获取输出中的数字
- symfony - Symfony YAML 文件连接参数
- autodesk-viewer - 在 Forge Viewer 中禁用上下文菜单
- reactjs - 加快反应组件渲染
- javascript - 比较对象数组并更新 Angular 6 打字稿中的键
- r - 将案例分配给代理:约束是完成每个案例的时间和代理的可用时间
- drupal - 特定站点的drupal 8路径
- android - 在内存杀死或销毁活动时,服务和广播接收器在 MI 手机中不起作用
- android - Android RecyclerView如何只为项目设置一次动画?
- html - 仅当正则表达式满足某些条件时如何替换html中的单词