Det er nyttigt at forstå det grundlæggende i async
/ await
fordi det er en noget utæt abstraktion og har en række faldgruber.
Grundlæggende har du to muligheder:
-
Forbliv synkron. I dette tilfælde er det sikkert at bruge
.Result
og.Wait()
på henholdsvis de asynkrone opkald, f.eks. noget lignende// Insert: collection.InsertOneAsync(user).Wait(); // FindAll: var first = collection.Find(p => true).ToListAsync().Result.FirstOrDefault();
-
Gå asynkron i din kodebase. At gøre det async er ret 'smittende', desværre, så enten konverterer du stort set alt til asynkron, eller ej. Forsigtig, at blande synkronisering og async forkert vil føre til dødvande . At bruge async har en række fordele, fordi din kode kan fortsætte med at køre, mens MongoDB stadig fungerer, f.eks.
// 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;