MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comprendre les changements dans le nouveau pilote C# de MongoDB (Async et Await)

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;