在我的应用程序中,我有一个后台线程,该线程确保本地数据库(核心数据)与服务器同步。有多种触发处理的方式(notificationServer观察器,计时器等)。但是,我想确保当时只有一个实例在处理数据。因此,如果在“旧”同步任务运行时触发了处理任务,我希望它等待上一个任务完成。
我当前的代码如下:
backgroundContext = persistance.persistentContainer.newBackgroundContext()
// this is an instance variable which will be shared by all the threads
...
...
@objc func managedObjectContextDidSave(notification: NSNotification) {
backgroundContext.perform {
self.processAllHisotory()
}
}
是否可以保证如果我在同一上下文中执行多个任务,它们将不会并行执行?如果没有,同步这些任务的最佳方法是什么?
答案 0 :(得分:3)
如果创建DispatchQueue,则它是一个串行队列。正在进行任务时,新任务无法启动。实际上,串行队列是一个锁。