在后台线程中使用 Couchbase
Using Couchbase in background thread
我正在开发一个使用 Couchbase 同步文档的应用程序。现在我在主线程上创建并使用相同的所有文档。
但现在我陷入了一个场景,我需要在主线程之外的其他线程中创建和推送文档,而不是阻塞 UI。
我怎样才能运行 Couchbase 数据库在后台线程中的部分只支持上述场景。
尝试了 Couchbase 文档中的并发方法 support.But 收到 线程安全崩溃 每当我像这样在后台线程中创建文档时崩溃提示。
DispatchQueue.global(qos: .background).async {
//creating couchbase documents here
}
跌破崩溃:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '***** THREAD-SAFETY
VIOLATION: This database is being used on a thread it wasn't created
on! Please see the concurrency guidelines in the Couchbase Lite
documentation. *****
请帮忙。
1.x 中的 Couchbase Lite API 不是线程安全的,并且支持线程限制模型。所以你不能跨线程共享对象 - 换句话说,如果你在主线程上创建了一个 CBLDatabase
对象,你不能在后台线程上使用该实例。您将必须为后台线程创建一个新实例。
所以请执行以下操作:
- 新建一个serial dispatch queue
- 创建一个
CBLManager
实例
- 将经理的
dispatchQueue
属性 设置为您创建的队列
- 你的 Couchbase Lite 调用在你的队列中
dispatch_async
调用。
顺便说一句,Couchbase Mobile 2.0 API 是线程安全的,如果这是一个新建项目,您可能需要考虑这一点。
我正在开发一个使用 Couchbase 同步文档的应用程序。现在我在主线程上创建并使用相同的所有文档。
但现在我陷入了一个场景,我需要在主线程之外的其他线程中创建和推送文档,而不是阻塞 UI。
我怎样才能运行 Couchbase 数据库在后台线程中的部分只支持上述场景。
尝试了 Couchbase 文档中的并发方法 support.But 收到 线程安全崩溃 每当我像这样在后台线程中创建文档时崩溃提示。
DispatchQueue.global(qos: .background).async {
//creating couchbase documents here
}
跌破崩溃:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '***** THREAD-SAFETY VIOLATION: This database is being used on a thread it wasn't created on! Please see the concurrency guidelines in the Couchbase Lite documentation. *****
请帮忙。
1.x 中的 Couchbase Lite API 不是线程安全的,并且支持线程限制模型。所以你不能跨线程共享对象 - 换句话说,如果你在主线程上创建了一个 CBLDatabase
对象,你不能在后台线程上使用该实例。您将必须为后台线程创建一个新实例。
所以请执行以下操作:
- 新建一个serial dispatch queue
- 创建一个
CBLManager
实例 - 将经理的
dispatchQueue
属性 设置为您创建的队列 - 你的 Couchbase Lite 调用在你的队列中
dispatch_async
调用。
顺便说一句,Couchbase Mobile 2.0 API 是线程安全的,如果这是一个新建项目,您可能需要考虑这一点。