因此,如果在_SecondaryContext.userdata_primary.InsertOneAsync(resp



我正在调用一个函数save((来将数据保存在C#中的mongodb数据库中

public void Save(class_name response){
using (var  _SecondaryContext = new MongoDbContext())
{
_SecondaryContext.userdata_primary.InsertOneAsync(response);
_SecondaryContext.SaveChanges();
} 
}

上面的代码运行良好,没有任何错误,它也将数据存储在我的数据库中,但不是每次都存储。在某些情况下,数据库中缺少数据,数据未存储。我认为这是因为InsertOneAysnc是一项Aysnc任务,在交通繁忙的情况下,它无法正常工作。因此,我尝试使Save((函数异步,并在saveChanges 之前插入时使用wait

public async void Save(class_name response){
using (var  _SecondaryContext = new MongoDbContext())
{
await _SecondaryContext.userdata_primary.InsertOneAsync(response);
_SecondaryContext.SaveChanges();
} 
}

在交通繁忙的情况下它能正常工作吗?我没有办法测试它

在某些情况下,数据库中缺少数据,数据未存储。我认为这是因为InsertOneAysnc是一项Aysnc任务,在交通繁忙的情况下,它不能正常工作

代码是启动异步任务,但它不会(异步(等待它完成。丢失数据是"丢失"的一个可能的副作用;火与遗忘;异步工作是这样的。

所以我尝试使Save((函数异步,并在saveChanges 之前插入时使用wait

使用await是正确的解决方案,但使用async void不是。async void强制Save的任何呼叫者使用即发即弃,而您又回到了相同的情况。正确的解决方案是使用await,然后使Save成为async Task方法。然后,您必须对每个调用Save的地方使用await,并使它们成为返回Task/Task<T>等的async方法。

首先,您的更改是正确的。在第一种情况下,您在保存更改之前没有等待插入,导致无法保存。

关于流量,这取决于你期望的流量。至于编码原理,这里正确地使用了wait/async。您的更改不会造成额外的不必要的延迟,实际上它会提供更快的用户体验,因为Save函数是异步的。

如果用户遇到了延迟,那么请求的数量可能会超过数据库服务器可以处理的最大数量。在这种情况下,您必须研究扩展数据库的策略,但这是另一个主题。

最新更新