È utile comprendere le basi di async
/ await
perché è un'astrazione un po' trapelata e presenta una serie di insidie.
In sostanza, hai due opzioni:
-
Rimani sincrono. In questo caso, puoi usare
.Result
e.Wait()
rispettivamente sulle chiamate asincrone, ad es. qualcosa come// Insert: collection.InsertOneAsync(user).Wait(); // FindAll: var first = collection.Find(p => true).ToListAsync().Result.FirstOrDefault();
-
Vai asincrono nella tua base di codice. Farlo in modo asincrono è piuttosto "contagioso", sfortunatamente, quindi o converti praticamente tutto in asincrono o no. Attento, la combinazione errata di sync e async porterà a deadlock . L'uso di async presenta una serie di vantaggi, perché il codice può continuare a essere eseguito mentre MongoDB è ancora in funzione, ad es.
// 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;