Синхронная обработка с DispatchQueue в Swift
У меня есть метод, который выполняет обработку событий, которые я получаю от сервера. Метод может быть вызван из нескольких мест в разных классах. Я хочу синхронизировать обработку событий, используя 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 ответ
Попробуйте что-то вроде этого:
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
}
}
}