Es ist hilfreich, die Grundlagen von async
zu verstehen / await
weil es eine etwas undichte Abstraktion ist und eine Reihe von Fallstricken hat.
Im Wesentlichen haben Sie zwei Möglichkeiten:
-
Bleiben Sie synchron. In diesem Fall ist es sicher,
.Result
zu verwenden und.Wait()
bei den asynchronen Aufrufen, z.B. so etwas wie// Insert: collection.InsertOneAsync(user).Wait(); // FindAll: var first = collection.Find(p => true).ToListAsync().Result.FirstOrDefault();
-
Gehen Sie in Ihrer Codebasis asynchron vor. Es asynchron zu machen, ist leider ziemlich "ansteckend", also konvertieren Sie entweder so ziemlich alles in asynchron oder nicht. Vorsicht, das falsche Mischen von Sync und Async führt zu Deadlocks . Die Verwendung von async hat eine Reihe von Vorteilen, da Ihr Code weiter ausgeführt werden kann, während MongoDB noch arbeitet, z. B.
// 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;