我有一个连接到 OData 服务的 Silverlight 4 应用程序。我的模型正在并行向服务提交多个查询,并且在查询回调中,我正在使用后台工作程序处理结果。
如果我正在拨打一个电话,这很好用,但是一旦我同时拨打多个电话 - 有时它会起作用 - 但大多数时候我在调用 EndExecute 时在数据服务上下文中遇到异常(它似乎是它正在将实体添加到其内部更改跟踪机制中。)
所以我决定在我调用 EndExecute 的时候锁定数据服务
lock (dataService)
{
results = query.EndExecute(queryCallback).ToList<Video>();
}
这解决了问题,现在它可以可靠地处理数据请求。
我的问题是双重的 - 这是推荐的做法吗?OData 上下文不是线程安全的吗?