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(); }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; }