Piszę bardzo, bardzo proste zapytanie, które po prostu pobiera dokument z kolekcji według unikalnego identyfikatora. Po pewnym frusteration (jestem nowy w Mongo i asynchroniczny/czekają model programowania), I zdobione to:Różnica między Find i FindAsync
IMongoCollection<TModel> collection = // ...
FindOptions<TModel> options = new FindOptions<TModel> { Limit = 1 };
IAsyncCursor<TModel> task = await collection.FindAsync(x => x.Id.Equals(id), options);
List<TModel> list = await task.ToListAsync();
TModel result = list.FirstOrDefault();
return result;
To działa, to świetnie! Ale zachować widząc odniesień do „znaleźć” sposób, a ja pracowałem na to uwagę:
IMongoCollection<TModel> collection = // ...
IFindFluent<TModel, TModel> findFluent = collection.Find(x => x.Id == id);
findFluent = findFluent.Limit(1);
TModel result = await findFluent.FirstOrDefaultAsync();
return result;
Jak się okazuje, to też działa, to świetnie!
Jestem pewien, że jest jakiś ważny powód, dla którego mamy dwa różne sposoby osiągnięcia tych wyników. Jaka jest różnica między tymi metodami i dlaczego powinienem wybrać jeden nad drugim?
Słowo kluczowe 'async' pozwala kompilatorowi" zarządzać "twoim kodem poprzez jego harmonogram. Może to zrobić, ale nie zawsze spowoduje, że Twoja aplikacja będzie wielowątkowa. Słowo kluczowe "await" sygnalizuje kompilatorowi dobre punkty decydujące i zmieniające kontekst lub wykorzystujące nowy wątek. – whoisj
'' async' w szczególności _nie_ powoduje, że twoja aplikacja jest wielowątkowa. Zobacz [tutaj] (https://msdn.microsoft.com/en-us/library/hh191443.aspx). To nie jest pytanie o C#, ale różnice w metodach dostępnych z MongoDB C# API. – object88
Co masz na myśli, że 'FindAsync' nie spowoduje, że twoja aplikacja będzie wielowątkowa? Jest duża szansa, że to zrobi, jeśli nie "zaczekasz" od razu. –