Полезно е да разберете основите на async
/ await
защото това е донякъде пропусклива абстракция и има редица клопки.
По същество имате две възможности:
-
Останете синхронни. В този случай е безопасно да използвате
.Result
и.Wait()
на асинхронните повиквания, съответно, напр. нещо като// Insert: collection.InsertOneAsync(user).Wait(); // FindAll: var first = collection.Find(p => true).ToListAsync().Result.FirstOrDefault();
-
Преминете към async във вашата кодова база. Правенето му async е доста „заразно“, за съжаление, така че или конвертирате почти всичко в async, или не. Внимавайте, неправилното смесване на sync и async ще доведе до блокиране . Използването на async има редица предимства, тъй като вашият код може да продължи да се изпълнява, докато MongoDB все още работи, напр.
// 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;