调用BeginSaveChanges(null,null)来执行Fire和Forget Async DataContext调用是否安全?

时间:2010-08-26 21:00:50

标签: c# azure datacontext

我注意到在使用BeginSaveChanges(null,null)执行许多数据库事务时,最后一个查询有时不成功。是因为我的DataContext实例死得太快而无法执行查询吗?

当我更改代码以使用普通的SaveChanges时,所有查询都成功。

具体来说,我正在使用TableServiceContext对Azure表存储执行查询。

编辑 - 如果处理我的DataContex是真正的问题。我有什么替代品?我应该包装我的datacontext的实例并在任务中执行我的查询吗?

3 个答案:

答案 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和忘记方法调用的最佳方式。

What's the new C# await feature do?