C# 向MongoDb异步插入实体不工作
有人能告诉我为什么这个代码不起作用吗?它编译、运行,但Mongo数据库仍然为空。同步进行时,它正在工作C# 向MongoDb异步插入实体不工作,c#,.net,mongodb,asynchronous,C#,.net,Mongodb,Asynchronous,有人能告诉我为什么这个代码不起作用吗?它编译、运行,但Mongo数据库仍然为空。同步进行时,它正在工作 class Program { static void Main(string[] args) { var client = new MongoClient(); var db = client.GetDatabase("Mongo"); var collection = db.GetCollection<User>(
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);
}
}
类程序
{
静态void Main(字符串[]参数)
{
var client=new MongoClient();
var db=client.GetDatabase(“Mongo”);
var collection=db.GetCollection(“用户”);
用户=新用户(“丹尼斯”、“张”、“中国”,21);
AddUserAsync(用户,集合);
}
静态异步void AddUserAsync(用户用户,IMongoCollection集合)
{
等待收集。插入同步(用户);
}
}
该方法是异步的,但您不必等待操作完成。试试这个
static async Task AddUserAsync(User user, IMongoCollection<User> collection)
{
await collection.InsertOneAsync(user);
}
您不必等待
AddUserAsync
完成。为此,您有两个选择:
AddUserAsync(用户,集合).GetAwaiter().GetResult()
,它将一直阻止,直到异步函数完成异步Main
,如下所示:
static async Task Main()
{
...
await AddUserAsync(user, collection);
}
AddUserAsync
函数以返回任务,只需更改签名:
static async Task AddUserAsync(User user, IMongoCollection<User> collection)
静态异步任务AddUserAsync(用户用户,IMongoCollection集合)
设置是正确的。同步进行时,它工作正常。斯蒂芬·克利里(Stephen Cleary)在这方面写了一篇优秀的文章,你可能会觉得有趣。
static async Task AddUserAsync(User user, IMongoCollection<User> collection)