sql >> Databáze >  >> NoSQL >> MongoDB

Proč nemohu ladit kód v asynchronní metodě?

Protože await spusťte GetDataAsync metoda. Když první await je dosaženo, vlákno se vrátí volajícímu. Protože nečekáte na dokončení úlohy, vaše konzolová aplikace se ukončí a bod přerušení není dosažen. Budete také muset aktualizovat GetDataAsync metoda pro vrácení Task spíše než prázdnotou. Nemůžete čekat na prázdnotu. Měli byste se vyhnout použití asynchronního voidu pro cokoli jiného než pro obsluhu události.

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. Průvodce vývojáře k sadám replik MongoDB

  2. Jak může Redis třídit podle dvou různých seřazených sad?

  3. Vlastní deserializace

  4. Přesnost příkazu redis dbsize