我有一个方法可以处理从服务器收到的事件。可以从不同类中的多个位置调用该方法。我想使用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)
}
感谢任何帮助。谢谢!
答案 0 :(得分:0)
尝试这样的事情:
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
}
}
}