从多个BackgroundWorkers调用时锁定OData DataServiceContext

时间:2010-09-10 14:25:36

标签: silverlight backgroundworker odata

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

如果我正在进行一次调用,这很有效,但是只要我同时进行多个调用 - 有时它可以正常工作 - 但是大多数情况下,当我调用EndExecute时,它会在dataservice上下文中出现异常(它出现将实体添加到其内部变更跟踪机制时。)

所以我决定在我调用EndExecute

的时候锁定数据服务
lock (dataService)
{
    results = query.EndExecute(queryCallback).ToList<Video>(); 
}

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

我的问题有两个 - 这是一个推荐的做法吗? OData上下文不是线程安全的吗?

1 个答案:

答案 0 :(得分:2)

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

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