gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:31:53 27 4
gpt4 key购买 nike

我的场景是这样的

//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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com