Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

654
Vistas
C# MongoDB FindAsync nunca regresa en Await

Hay otras preguntas como esta pero no relacionadas con el FindAsync real por lo que puedo decir.

Mi ClientsController llama a ClientService.GetClients , que usa los controladores mongo para consultar un mongodb en Azure.

Al pasar por el depurador, llega al punto en el que llamo a clientCollection.FindAsync . Si paso por encima de esto, la siguiente línea nunca se golpea y no se dan errores. Es como si la tarea esperada nunca regresara.

 public async Task<List<Client>> GetClients(SearchRequestDTO searchRequest) { var response = new List<Client>(); var db = _databaseUtilityService.GetCoreDatabase(); var clientCollection = db.GetCollection<Client>(Properties.Settings.Default.ClientCollectionName); var cursor = await clientCollection.FindAsync(new BsonDocument()); while (await cursor.MoveNextAsync()) { response.Concat(cursor.Current.ToList()); } return response; }

¿Cuál sería la razón por la que el depurador nunca pasa por encima de la línea var cursor = ... ?

Editar-

En cambio, puedo obtener Result -

var cursor = clientCollection.FindAsync(new BsonDocument()).Result;

Pero no estoy seguro de que eso sea lo que quiero hacer.

 public async Task<List<Client>> GetClients(SearchRequestDTO searchRequest) { var db = _databaseUtilityService.GetCoreDatabase(); var clientCollection = db.GetCollection<Client>(Properties.Settings.Default.ClientCollectionName); var results = clientCollection.FindAsync(new BsonDocument()).Result; return results.ToList(); }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Como no hay mucha información sobre el contexto, se me ocurrieron clases simuladas para satisfacer la pregunta.

Consulte a continuación un método sobrecargado y, cuando se le llame, siempre le devolverá una lista de tres registros. Ahora, ¿qué le pasa a tu código? Creo que está en tu bucle while. Está llamando a response.Concat lo que está causando un problema. Estoy llamando a response.AddRange en su lugar y funciona.

 public async Task<List<Client>> GetClients() { var mongoUri = "mongodb://localhost:27017"; var mongoClient = new MongoClient(mongoUri); var mongoDatabase = mongoClient.GetDatabase("ClientDB"); var clientCollection = mongoDatabase.GetCollection<Client>("Clients"); // Empty collection to always get accurate result. clientCollection.DeleteMany(new BsonDocument()); // Insert some dummy data clientCollection.InsertOne(new Client() {Address = "One street, some state", ZipCode = 11111}); clientCollection.InsertOne(new Client() { Address = "2nd street, some state", ZipCode = 22222 }); clientCollection.InsertOne(new Client() { Address = "Third street, some state", ZipCode = 33333 }); var response = new List<Client>(); var cursor = await clientCollection.FindAsync(new BsonDocument()); while (await cursor.MoveNextAsync()) { response.AddRange(cursor.Current); } return response; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda