我想在同步函数中使用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;
}
所以基本上我不在乎日志实际保存到数据库时,我只是不想让它减慢我的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");
这与第一个相比如何?它会像我想的那样执行吗?
答案 0 :(得分:4)
像这样的“fire and forget”方法的问题是错误处理。如果将日志保存到数据库时出错,那么您想知道的是什么吗?
如果您想静默忽略错误,那么您可以忽略返回的任务,如第一个示例中所示。您的第二个示例使用async void
,这很危险:如果您的第二个示例存在数据库写入错误,则默认行为是使应用程序崩溃。
如果您想通过采取某些操作来处理错误,请在第二个示例中围绕方法的主体添加try
/ catch
。