MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Perché non riesco a eseguire il debug del codice in un metodo asincrono?

Perché non sei await ing del tuo GetDataAsync metodo. Quando il primo await viene raggiunto il thread viene restituito al chiamante. Poiché non stai aspettando il completamento dell'attività, l'applicazione della console si chiude e il punto di interruzione non viene raggiunto. Dovrai anche aggiornare GetDataAsync metodo per restituire un Task piuttosto che vuoto. Non puoi aspettare il vuoto. Dovresti evitare di usare async void per qualcosa di diverso dal gestore di eventi.

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
}