C# 在同步函数中保存对db async的更改
我想在同步函数中使用saveChangesAsync。举个例子,我想用这个C# 在同步函数中保存对db async的更改,c#,entity-framework,asynchronous,task-parallel-library,dbcontext,C#,Entity Framework,Asynchronous,Task Parallel Library,Dbcontext,我想在同步函数中使用saveChangesAsync。举个例子,我想用这个 public string getName(int id) { var db = new dbContext(); String name= db.names.find(id); db.log.add(new Log("accessed name"); db.savechangesAsync(); return name; } 因此,基本上我不关心日志何时实际保存到数据库,我只是不希望它减慢我的getNam
public string getName(int id)
{
var db = new dbContext();
String name= db.names.find(id);
db.log.add(new Log("accessed name");
db.savechangesAsync();
return name;
}
因此,基本上我不关心日志何时实际保存到数据库,我只是不希望它减慢我的getName函数。我希望getname返回,然后日志可以在返回之后/期间的任何时间保存到数据库中
我将如何实现这一目标?没有任何东西取决于日志提交的时间,因此我所关心的可能需要2分钟
我提出了另一个解决方案:
private async void UpdateLastComms(string _id)
{
int id = Int32.Parse(_id);
using (var db = new dbContext())
{
db.Devices.Where(x => x.UserId == id).FirstOrDefault().LastComms = DateTime.Now;
await db.SaveChangesAsync();
}
}
然后我可以像这样调用这个函数UpdateLastComms(“5”)代码>
这种方法与第一种方法相比如何?它会像我想的那样执行吗?像这样的“激发并忘记”方法的问题是错误处理。如果将日志保存到数据库时出错,您是否想了解这一点
如果希望以静默方式忽略错误,那么可以忽略返回的任务,如第一个示例所示。第二个示例使用了async void
,这很危险:如果第二个示例出现数据库写入错误,默认行为是使应用程序崩溃
如果您想通过采取一些措施来处理错误,那么在第二个示例中的方法体周围放置一个try
/catch
。像这样的“激发并忘记”方法的问题是错误处理。如果将日志保存到数据库时出错,您是否想了解这一点
如果希望以静默方式忽略错误,那么可以忽略返回的任务,如第一个示例所示。第二个示例使用了async void
,这很危险:如果第二个示例出现数据库写入错误,默认行为是使应用程序崩溃
如果您想通过采取一些操作来处理错误,那么在第二个示例中的方法体周围放置一个try
/catch