tutorial sort guide conexion builders c# mongodb asynchronous

c# - sort - ¿Por qué no puedo depurar el código en un método asíncrono?



pagination mongodb c# (1)

Porque no estás esperando tu método GetDataAsync . Cuando se alcanza la primera await el hilo se devuelve a la persona que llama. Debido a que no está esperando a que se complete la tarea, no se puede salir de la aplicación de la consola y su punto de interrupción. También deberá actualizar el método GetDataAsync para devolver una Task lugar de anularla. No puedes esperar el vacío. Debería evitar utilizar async void para cualquier otra cosa que no sea el controlador de eventos.

protected static IMongoClient _client; protected static IMongoDatabase _database; static void Main(string[] args) { _client = new MongoClient(); _database = _client.GetDatabase("test"); GetDataAsync().Wait(); // Will block the calling thread but you don''t have any other solution in a console application } private static async Task GetDataAsync() //method added by me. { int x = await GetData(); } private static async Task<int> GetData() { var collection = _database.GetCollection<BsonDocument>("restaurants"); var filter = new BsonDocument(); var count = 0; Func<int> task = () => count; //added by me. var result = new Task<int>(task); //added by me. using (var cursor = await collection.FindAsync(filter)) //Debugger immediately exits here, goes back to main() and then terminates. { while (await cursor.MoveNextAsync()) { var batch = cursor.Current; foreach (var document in batch) { // process document count++; } } } return count; //added by me }

De hecho, empecé la noche intentando aprender más sobre MongoDB, pero me estoy quedando colgado y .NET espera / async cosas. Estoy tratando de implementar el código que se muestra en el site de MongoDB. He tenido que modificarlo un poco, para poder compilar mi programa. Sé que tengo la siguiente aplicación de mi consola.

protected static IMongoClient _client; protected static IMongoDatabase _database; static void Main(string[] args) { _client = new MongoClient(); _database = _client.GetDatabase("test"); GetDataAsync(); } private static async void GetDataAsync() //method added by me. { int x = await GetData(); } private static async Task<int> GetData() { var collection = _database.GetCollection<BsonDocument>("restaurants"); var filter = new BsonDocument(); var count = 0; Func<int> task = () => count; //added by me. var result = new Task<int>(task); //added by me. using (var cursor = await collection.FindAsync(filter)) //Debugger immediately exits here, goes back to main() and then terminates. { while (await cursor.MoveNextAsync()) { var batch = cursor.Current; foreach (var document in batch) { // process document count++; } } } return count; //added by me }

Cuando ejecuto la aplicación, el depurador llamará a mi método GetDataAsync (), que a su vez llamará al método GetData (). Llega a la línea "using (var cursor = await collection.FindAsync (filter))" y luego regresa inmediatamente para finalizar el método main ().

Los puntos de ruptura que coloco debajo de esa línea se ignoran, al igual que los puntos de ruptura que coloco en el método GetDataAsync (). ¿Este código simplemente no se ejecuta porque el programa sale? ¿Puede alguien explicarme lo que está pasando?