如何确保只有一个线程正在执行后台上下文块

时间:2019-06-10 18:45:33

标签: ios swift grand-central-dispatch

在我的应用程序中,我有一个后台线程,该线程确保本地数据库(核心数据)与服务器同步。有多种触发处理的方式(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()
        }
}

是否可以保证如果我在同一上下文中执行多个任务,它们将不会并行执行?如果没有,同步这些任务的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

如果创建DispatchQueue,则它是一个串行队列。正在进行任务时,新任务无法启动。实际上,串行队列是一个锁。