MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Verstehen der Änderungen im neuen C#-Treiber von MongoDB (Async und Await)

Es ist hilfreich, die Grundlagen von async zu verstehen / await weil es eine etwas undichte Abstraktion ist und eine Reihe von Fallstricken hat.

Im Wesentlichen haben Sie zwei Möglichkeiten:

  • Bleiben Sie synchron. In diesem Fall ist es sicher, .Result zu verwenden und .Wait() bei den asynchronen Aufrufen, z.B. so etwas wie

    // Insert:
    collection.InsertOneAsync(user).Wait();
    
    // FindAll:
    var first = collection.Find(p => true).ToListAsync().Result.FirstOrDefault();
    
  • Gehen Sie in Ihrer Codebasis asynchron vor. Es asynchron zu machen, ist leider ziemlich "ansteckend", also konvertieren Sie entweder so ziemlich alles in asynchron oder nicht. Vorsicht, das falsche Mischen von Sync und Async führt zu Deadlocks . Die Verwendung von async hat eine Reihe von Vorteilen, da Ihr Code weiter ausgeführt werden kann, während MongoDB noch arbeitet, z. B.

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