我目前正致力于审计跟踪功能并使用实体框架。
当前代码有效,但需要很长时间才能运行。
public class MyDbContext : DbContext {
public int SaveChanges() {
// get changes from ChangeTracker.DetectChanges()
// generate custom audit trail records
return base.SaveChanges();
}
}
我正在考虑在保存更改后执行审计跟踪构建并执行异步
public int SaveChanges() {
// get changes from ChangeTracker.DetectChanges()
int ret = base.SaveChanges();
// call async function to create audit
return ret;
}
我尝试过使用async-await,但遇到了丢弃对象的问题。我并不习惯于线程/异步调用。
是否有一种方法可以执行“部分”返回,其中父进程获得所需的返回以继续其进程,而对象仍处于活动状态/未处理以继续执行异步任务。
public int SaveChanges() {
// get changes from ChangeTracker.DetectChanges()
int ret = base.SaveChanges();
// partial return ret;
// continue process in generating audit trail
}
答案 0 :(得分:0)
在使用Async Await的场景中,如果您的后台进程比父进程的生命周期更长,您可能会面临类似于您所面临的情况。
如果您正在运行框架4.5.2或者如果您可以升级到该框架,那么您的方案中的最佳选择是使用QueueBackgroundWorkItem API。下面是使用链接
如果您使用的是框架4.5,则可以按照本文中的建议使用IRegisteredObject实现