c# - 将实体插入到 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);
}
}
解决方案
你不是在等待AddUserAsync
完成。为此,您有几个选择:
- 使用
AddUserAsync(user, collection).GetAwaiter().GetResult()
,它将阻塞直到异步函数完成。 如果您使用的是 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)
推荐阅读
- mapbox - 如何使用现有的 Mapbox GL“模板”但添加高程/雾?
- java - 如何在 Spring Boot 应用程序中实例化日志
- java - 带有 React UI 的 Spring 应用程序 - 应用 @EnableWebMvc 时如何提供服务?
- python - 通过嵌入在谷歌网站上的用户输入编辑谷歌表格(使用 Python)
- python - Kivy 自定义小部件行为
- r - Plotly 图在 Rstudio Graph 窗口和破折号应用程序(Choroplethmapbox)中的显示不一样
- c# - 跨站点脚本:验证不佳 - 强化问题(c#)
- angular - 可重复使用的 MAT-TABLE 下拉过滤器不起作用
- java - 在 QuarkusTest 中使用 LambdaClient.invoke 如何提供自定义标头?
- php - 不推荐使用 __call() 时如何覆盖我的 SOAP 请求?