1

我有一个连接到 OData 服务的 Silverlight 4 应用程序。我的模型正在并行向服务提交多个查询,并且在查询回调中,我正在使用后台工作程序处理结果。

如果我正在拨打一个电话,这很好用,但是一旦我同时拨打多个电话 - 有时它会起作用 - 但大多数时候我在调用 EndExecute 时在数据服务上下文中遇到异常(它似乎是它正在将实体添加到其内部更改跟踪机制中。)

所以我决定在我调用 EndExecute 的时候锁定数据服务

lock (dataService)
{
    results = query.EndExecute(queryCallback).ToList<Video>(); 
}

这解决了问题,现在它可以可靠地处理数据请求。

我的问题是双重的 - 这是推荐的做法吗?OData 上下文不是线程安全的吗?

4

1 回答 1

2

DataServiceContext 不是线程安全的。它没有任何线程关联,但它不支持同时调用多个线程。

所以是的,您必须确保一次只有一个线程通过使用锁或其他方式进入上下文和关联对象(例如查询对象)。

于 2010-09-10T23:01:13.817 回答