Подтвердить что ты не робот

Драйвер 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> (это статическое состояние, если быть точным).

4b9b3361

Ответ 1

Из эта страница вы знаете, что MongoServer, MongoDatabase, MongoClient, MongoCollection и MongoGridFS являются потокобезопасными. MongoCursor специально не является потокобезопасным.

Это означает, что вы можете безопасно обращаться к ним из нескольких задач, не беспокоясь об этом, изменяя свое "состояние" - однако вам все равно нужно заботиться о том, как устанавливать или изменять их значения.

В частности, ваш вопрос, запрос коллекции (который возвращает объект-курсор) не мутирует объект MongoCollection.