sql >> Database >  >> NoSQL >> MongoDB

Waarom kan ik code niet opsporen in een asynchrone methode?

Omdat je niet await uw GetDataAsync methode. Wanneer de eerste await is bereikt, wordt de thread teruggestuurd naar de beller. Aangezien u niet wacht op de voltooiing van de taak, wordt uw consoletoepassing afgesloten en wordt uw onderbrekingspunt niet bereikt. U moet ook de GetDataAsync . bijwerken methode om een ​​Task te retourneren in plaats van ongeldig. Je kunt niet op leegte wachten. Vermijd het gebruik van async void voor iets anders dan de gebeurtenishandler.

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. Tips voor het opslaan van MongoDB-back-ups in de cloud

  2. python-rq worker sluit automatisch

  3. MongoDB-aggregatie:lopende totalen berekenen van de som van vorige rijen

  4. Geen reactie na verbinding van selderij naar redis via ssl