Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

661
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda