Google.Cloud.Datastore.V1.DatastoreDb 是线程安全的吗?
Is Google.Cloud.Datastore.V1.DatastoreDb thread-safe?
我想知道在 c# 中是否应该在每次我想使用它时都创建 Google.Cloud.Datastore.V1.DatastoreDb
的新实例,或者我可以将一个全局实例作为单例保留?
这是在 linux 上的 c# .net core 3 和 Assembly Google.Cloud.Datastore.V1, Version=2.1.0.0
using Google.Cloud.Datastore.V1;
void DoStuff()
{
var db = DatastoreDb.Create("my-project")
db.Insert(entity);
}
对比
using Google.Cloud.Datastore.V1;
static db = DatastoreDb.Create("my-project")
void DoStuff()
{
db.Insert(entity);
}
您可以使用 "com.google.cloud.datastore",这是一个使用 v1 库 的包装器。
"com.google.cloud.datastore" 根据此答案 .
是线程安全的
是的,DatastoreDb
不包含任何本地可变状态,并且是线程安全的。我们建议您使用它的单个实例,以避免打开不必要的网络连接。
DatastoreTransaction
,但是,确实包含本地状态,并且不是线程安全的。 (它没有线程亲和性,但无法防止多个线程同时尝试添加突变,例如。)
我想知道在 c# 中是否应该在每次我想使用它时都创建 Google.Cloud.Datastore.V1.DatastoreDb
的新实例,或者我可以将一个全局实例作为单例保留?
这是在 linux 上的 c# .net core 3 和 Assembly Google.Cloud.Datastore.V1, Version=2.1.0.0
using Google.Cloud.Datastore.V1;
void DoStuff()
{
var db = DatastoreDb.Create("my-project")
db.Insert(entity);
}
对比
using Google.Cloud.Datastore.V1;
static db = DatastoreDb.Create("my-project")
void DoStuff()
{
db.Insert(entity);
}
您可以使用 "com.google.cloud.datastore",这是一个使用 v1 库
是的,DatastoreDb
不包含任何本地可变状态,并且是线程安全的。我们建议您使用它的单个实例,以避免打开不必要的网络连接。
DatastoreTransaction
,但是,确实包含本地状态,并且不是线程安全的。 (它没有线程亲和性,但无法防止多个线程同时尝试添加突变,例如。)