Драйвер MongoDB С# и безопасность потоков
В документации для MongoClient
, MongoServer
, MongoDatabase
и MongoCollection<T>
я вижу, что он сказал, что они потокобезопасны.
Вопрос: Означает ли это, что у меня могут быть (например) статические поля из них в классе и доступ к ним из любого Task
/Thread
?
Как
public static MongoClient Client = new MongoClient(Properties.Settings.Default.MongoConnStr);
public static MongoServer Server = Client.GetServer();
public static MongoDatabase DraftDB = Server.GetDatabase("draftdb");
public static MongoCollection<MyDoc> Docs = Program.DraftDB.GetCollection<Location>("mydocs");
Специально о MongoCollection<T>
; Я хочу быть уверенным, что что-то вроде var cursor = Docs.Find(query).SetLimit(50);
не выполняет мутацию в MongoCollection<T>
(это статическое состояние, если быть точным).
Ответы
Ответ 1
Из эта страница вы знаете, что MongoServer, MongoDatabase, MongoClient, MongoCollection и MongoGridFS являются потокобезопасными. MongoCursor специально не является потокобезопасным.
Это означает, что вы можете безопасно обращаться к ним из нескольких задач, не беспокоясь об этом, изменяя свое "состояние" - однако вам все равно нужно заботиться о том, как устанавливать или изменять их значения.
В частности, ваш вопрос, запрос коллекции (который возвращает объект-курсор) не мутирует объект MongoCollection.