É útil entender o básico de
async
/ await
porque é uma abstração um pouco vazada e tem várias armadilhas. Basicamente, você tem duas opções:
-
Permaneça síncrono. Nesse caso, é seguro usar.Result
e.Wait()
nas chamadas assíncronas, respectivamente, por exemplo algo como
// Insert: collection.InsertOneAsync(user).Wait(); // FindAll: var first = collection.Find(p => true).ToListAsync().Result.FirstOrDefault();
-
Vá assíncrono em sua base de código. Fazer isso de forma assíncrona é bastante 'infeccioso', infelizmente, então você converte praticamente tudo em assíncrono ou não. Cuidado, misturar sincronização e assíncrona incorretamente levará a impasses . Usar assíncrono tem várias vantagens, porque seu código pode continuar sendo executado enquanto o MongoDB ainda estiver funcionando, por exemplo.
// 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;