sql >> Databasteknik >  >> NoSQL >> MongoDB

Varför kan jag inte felsöka kod i en asynkronmetod?

Eftersom du inte är await in din GetDataAsync metod. När den första await är nådd returneras tråden till den som ringer. Eftersom du inte väntar på att uppgiften ska slutföras avslutas din konsolapplikation och din brytpunkt nås inte. Du måste också uppdatera GetDataAsync metod för att returnera en Task snarare än ogiltig. Du kan inte vänta tomgång. Du bör undvika att använda asynkron void för något annat än händelsehanteraren.

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
}


  1. Hierarkiska frågor med Mongo med $graphLookup

  2. Vad är ett rent sätt att stoppa mongod på Mac OS X?

  3. Vad är skillnaden mellan findAndModify och update i MongoDB?

  4. Mongoose:vad är skillnaderna mellan Model.create och Collection.insert