Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在同步函数中保存对db async的更改_C#_Entity Framework_Asynchronous_Task Parallel Library_Dbcontext - Fatal编程技术网

C# 在同步函数中保存对db async的更改

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

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

这种方法与第一种方法相比如何?它会像我想的那样执行吗?

像这样的“激发并忘记”方法的问题是错误处理。如果将日志保存到数据库时出错,您是否想了解这一点

如果希望以静默方式忽略错误,那么可以忽略返回的任务,如第一个示例所示。第二个示例使用了
async void
,这很危险:如果第二个示例出现数据库写入错误,默认行为是使应用程序崩溃

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

像这样的“激发并忘记”方法的问题是错误处理。如果将日志保存到数据库时出错,您是否想了解这一点

如果希望以静默方式忽略错误,那么可以忽略返回的任务,如第一个示例所示。第二个示例使用了
async void
,这很危险:如果第二个示例出现数据库写入错误,默认行为是使应用程序崩溃

如果您想通过采取一些操作来处理错误,那么在第二个示例中的方法体周围放置一个
try
/
catch