【问题标题】:Save changes to db async in a synchronous function在同步函数中保存对 db async 的更改
【发布时间】:2014-03-31 09:18:16
【问题描述】:

我想在同步函数中使用 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");

this 与第一个相比如何?它会按照我的想法执行吗?

【问题讨论】:

    标签: c# entity-framework asynchronous task-parallel-library dbcontext


    【解决方案1】:

    像这样的“一劳永逸”方法的问题在于错误处理。如果将日志保存到数据库时出错,那是您想了解的吗?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 2020-05-19
      • 2015-08-08
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2019-01-14
      相关资源
      最近更新 更多