使用Swift中的DispatchQueue进行同步处理

时间:2018-05-03 17:58:13

标签: ios swift grand-central-dispatch dispatch-queue

我有一个方法可以处理从服务器收到的事件。可以从不同类中的多个位置调用该方法。我想使用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)
}

感谢任何帮助。谢谢!

1 个答案:

答案 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
        }
    }
}