MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Entendendo as alterações no novo driver C# do MongoDB (Async e Await)


É ú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;