Vit*_*bio 2 asynchronous entity-framework
我的场景是这样的
//a lot of database dependant processing
db.SaveChangesAsync(); //asynchronouly saving database changes
//a lot of ANOTHER long term database INDEPENDANT stuff
Run Code Online (Sandbox Code Playgroud)
因为await db.SaveChangesAsync()等待直到对数据库进行了所有更改(可能要花一些时间)并且我不想等待,但是在paralell中,我想在WAVE之前使其他日志项保存SaveChanges正在保存更改,为什么我应该使用等待吗?如果我不使用await,则会在下图中收到磨损的信息。

此警告非常清楚-您正在启动异步任务,但没有完成该通知的机制。如果以后确实需要知道什么时候该怎么办?从方法返回之前还是需要确保数据与数据库同步之前?
await操作是确保数据安全的一种方法,但是正如您所说,您不希望在保存数据时停止独立处理。await是异步的,不是并行的。
此外,await执行Save任务可确保您捕获DB引发的所有异常。当您简单地释放任务时,所有的异常都会丢失-充其量,您可以TaskScheduler.UnobservedTaskException处理无法观察到的引发异常的任务,但是更简单的方法是简单地观察任务。
await如您所知,观察任务的一种方法是。另一个是简单地保存返回变量的Task对象SaveChangesAsync。这将使您稍后可以await(或Wait())在该Task上捕获其异常(通过尝试/捕获await调用或将a附加ContinueWith到Task上),并使编译器可以轻松地知道您没有将任务抛在脑后:
//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!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1099 次 |
| 最近记录: |