MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Comprensione delle modifiche nel nuovo driver C# di MongoDB (Async e Await)

È 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;