首页 > 解决方案 > 在 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)
}

任何帮助表示赞赏。谢谢!

标签: iosswiftgrand-central-dispatchdispatch-queue

解决方案


尝试这样的事情:

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

推荐阅读