Det är till hjälp att förstå grunderna i async
/ await
eftersom det är en något läckande abstraktion och har ett antal fallgropar.
Du har i huvudsak två alternativ:
-
Förbli synkron. I det här fallet är det säkert att använda
.Result
och.Wait()
på de asynkrona anropen, t.ex. något liknande// Insert: collection.InsertOneAsync(user).Wait(); // FindAll: var first = collection.Find(p => true).ToListAsync().Result.FirstOrDefault();
-
Gå asynkronisera i din kodbas. Att göra det asynkront är tyvärr ganska "smittsamt", så antingen konverterar du i stort sett allt till asynkront eller inte. Var försiktig, blandning av synkronisering och asynkronisering på fel sätt kommer att leda till dödlägen . Att använda async har ett antal fördelar, eftersom din kod kan fortsätta att köras medan MongoDB fortfarande fungerar, t.ex.
// 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;