首页 > 解决方案 > 将实体插入到 MongoDb 异步不起作用

问题描述

有人能告诉我为什么这段代码不起作用吗?它编译,它运行,但 Mongo 数据库仍然是空的。同步执行时它正在工作。

class Program
{
    static void Main(string[] args)
    {
        var client = new MongoClient();
        var db = client.GetDatabase("Mongo");
        var collection = db.GetCollection<User>("Users");

        User user = new User("Denis", "Chang", "China", 21);
        AddUserAsync(user, collection);
    }

    static async void AddUserAsync(User user, IMongoCollection<User> collection)
    {
        await collection.InsertOneAsync(user);
    }
}

标签: c#.netmongodbasynchronous

解决方案


你不是在等待AddUserAsync完成。为此,您有几个选择:

  1. 使用AddUserAsync(user, collection).GetAwaiter().GetResult(),它将阻塞直到异步函数完成。
  2. 如果您使用的是 C# 7.1,则可以使用async Main,如下所示:

    static async Task Main()
    {
        ...
        await AddUserAsync(user, collection);
    }
    

为了使这些方法中的任何一种起作用,您还需要更新您的AddUserAsync函数以返回 a Task,只需更改签名即可:

static async Task AddUserAsync(User user, IMongoCollection<User> collection)

推荐阅读