Il est utile de comprendre les bases de async
/ await
parce que c'est une abstraction quelque peu fuyante et qui comporte un certain nombre de pièges.
En gros, vous avez deux options :
-
Restez synchrone. Dans ce cas, il est prudent d'utiliser
.Result
et.Wait()
sur les appels asynchrones, respectivement, par ex. quelque chose comme// Insert: collection.InsertOneAsync(user).Wait(); // FindAll: var first = collection.Find(p => true).ToListAsync().Result.FirstOrDefault();
-
Devenez asynchrone dans votre base de code. Le faire de manière asynchrone est malheureusement assez "infectieux", donc soit vous convertissez à peu près tout en asynchrone, soit non. Attention, mélanger sync et async de manière incorrecte entraînera des blocages . L'utilisation d'async présente un certain nombre d'avantages, car votre code peut continuer à s'exécuter pendant que MongoDB fonctionne toujours, par exemple
// 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;