Je užitečné porozumět základům async
/ await
protože je to poněkud děravá abstrakce a má řadu úskalí.
V zásadě máte dvě možnosti:
-
Zůstaňte synchronní. V tomto případě je bezpečné použít
.Result
a.Wait()
na asynchronních hovorech, resp. něco jako// Insert: collection.InsertOneAsync(user).Wait(); // FindAll: var first = collection.Find(p => true).ToListAsync().Result.FirstOrDefault();
-
Přejděte asynchronně ve své kódové základně. Dělat to asynchronně je bohužel docela 'infekční', takže buď převedete skoro všechno na asynchronní, nebo ne. Pozor, nesprávné smíchání synchronizace a asynchronizace povede k uváznutí . Použití async má řadu výhod, protože váš kód může běžet i nadále, zatímco MongoDB stále funguje, např.
// FindAll: var task = collection.Find(p => true).ToListAsync(); // ...do something else that takes time, be it CPU or I/O bound // in parallel to the running request. If there's nothing else to // do, you just freed up a thread that can be used to serve another // customer... // once you need the results from mongo: var list = await task;