entity-framework - 是否必须在异步 EF 上等待 SaveChangesAsync()?

标签 entity-framework asynchronous

我的场景是这样的

//a lot of database dependant processing

db.SaveChangesAsync(); //asynchronouly saving database changes

//a lot of ANOTHER long term database INDEPENDANT stuff

因为await db.SaveChangesAsync()会等待,直到对数据库进行所有更改(可能需要一些时间),我不想等待,但并行地,我想在保存SaveChanges时在下面制作其他日志术语内容变化,为什么要使用await?如果我不使用等待,我会收到下图中的磨损。 enter image description here

最佳答案

此警告非常明确 - 您正在启动一个异步任务,但没有在任务完成时收到通知的机制。如果您稍后确实需要知道它何时完成怎么办?在从方法返回之前,或者在需要确保数据与数据库同步的时​​刻?

await操作是确保这一点的一种方法,但正如您所说,您不想在保存数据时停止独立处理。 await用于异步,而不是并行。

此外,await保存任务可确保您捕获数据库引发的任何异常。当您简单地释放任务时,任何异常都会丢失 - 充其量,您可以处理 TaskScheduler.UnobservedTaskException处理抛出异常的未观察到的任务,但更简单的方法是简单地观察任务。

观察任务的一种方法是 await , 如你所知。另一种方法是简单地保存 Task反对SaveChangesAsync返回一个变量。这将使您能够await (或 Wait() )稍后在该任务上捕获其异常(通过尝试/捕获 await 调用或将 ContinueWith 附加到任务),并且让编译器放心,知道您不会放弃任务的命运:

//a lot of database dependant processing
var dbSaveTask = db.SaveChangesAsync(); //asynchronouly saving database changes
//a lot of ANOTHER long term database INDEPENDANT stuff
// now, before assuming the DB is up to date, ensure the TAsk is complete. 
await dbSaveTask;
// now do something Db-dependent!

关于entity-framework - 是否必须在异步 EF 上等待 SaveChangesAsync()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43264075/

相关文章:

arrays - 带有 int 数组参数的 EF ExecuteSqlCommand

c# - 如何阻止 EntityFramework 获取所有行

javascript - Node js 应用程序中的 async.js 问题

c# - 在捕获 block 中等待

javascript - 可以在 NodeJS/Javascript 中使用 while/for 循环将此递归代码编写为迭代代码吗

javascript - YouTube 播放器 API : getDuration(), getCurrentTime()、getVideoData() 不工作

c# - 在 LINQ to Entities 中,您如何订购如下?

c# - 使用 EF Core 获取存储过程的输出参数值?

C# LINQ 获取字典计数

javascript - 为什么mongodb的find()方法无法找到Nodejs中最近插入的文档