我注意到在使用BeginSaveChanges(null,null)执行许多数据库事务时,最后一个查询有时不成功。是因为我的DataContext实例死得太快而无法执行查询吗?
当我更改代码以使用普通的SaveChanges时,所有查询都成功。
具体来说,我正在使用TableServiceContext对Azure表存储执行查询。
编辑 - 如果处理我的DataContex是真正的问题。我有什么替代品?我应该包装我的datacontext的实例并在任务中执行我的查询吗?
答案 0 :(得分:2)
首先,您应该始终使用任何BeginXXX方法调用匹配的EndXXX方法。
然后你应该确保在调用EndXXX方法之前不要处理你正在调用BeginXXX方法的对象。
保存即发即弃方法(忽略Dispose问题)是将EndXXX作为回调传递给BeginXXX:
obj.BeginXXX(callback: obj.EndXXX, state: null);
// -- or --
obj.BeginXXX(callback: asyncResult => obj.EndXXX(asyncResult), state: null);
在所有异步操作完成之前,您仍需要确保不要调用obj.Dispose();
。
答案 1 :(得分:1)
好吧,如果你不打电话给EndXXX,如果出现问题,你永远不会得到例外。您可能需要首先检查是否在最后一批中抛出异常。
答案 2 :(得分:0)
使用新的C#5 async / await功能似乎是执行 fire和忘记方法调用的最佳方式。