0

我想在同步函数中使用saveChangesAsync。例如,我想用这种情况。在同步函数中保存对db异步的更改

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");

此功能,这将如何比较第一,因为我觉得它会执行?

回答

4

像这样“火灾和遗忘”方法的问题是错误处理。如果将日志保存到数据库时发生错误,那么您想了解哪些内容?

如果您想默默忽略错误,那么您可以忽略返回的任务,如第一个示例中所示。第二个示例使用async void,这很危险:如果第二个示例中存在数据库写入错误,则默认行为是使应用程序崩溃。

如果您想通过采取某些措施来处理错误,请在第二个示例中将方法的主体围绕try/catch