Ios Swift中与DispatchQueue的同步处理
我有一个方法来处理从服务器接收到的事件。可以从不同类中的多个位置调用该方法。我想使用DispatchQueue/Serial Queue同步事件处理,以丢弃多个调用中的重复事件。我知道调度队列及其工作原理,但无法找到解决问题的最佳解决方案 实现:通过同步,我希望确保顺序处理,放弃重复事件Ios Swift中与DispatchQueue的同步处理,ios,swift,grand-central-dispatch,dispatch-queue,Ios,Swift,Grand Central Dispatch,Dispatch Queue,我有一个方法来处理从服务器接收到的事件。可以从不同类中的多个位置调用该方法。我想使用DispatchQueue/Serial Queue同步事件处理,以丢弃多个调用中的重复事件。我知道调度队列及其工作原理,但无法找到解决问题的最佳解决方案 实现:通过同步,我希望确保顺序处理,放弃重复事件 func process(events:[Events]) { // by synchronizing I want to ensure sequential processing, to discard
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
}
}
}
我认为调度组与解决方案无关。如果要序列化所执行的工作,要为每个调用提供查询已处理哪些事件的机会,请使用serial queue.Yea。我想我想提一下调度队列,但我有点困惑,你能为这个@Avi提供一个解决方案吗?我已经编辑了我的问题。我会确保
事件
是相等和可比较的,并使用集合
而不是数组
。否则,这就是我在对这个问题的评论中所建议的。