我有一个运行时间很长的查询,需要很长时间才能让我的客户端保持连接。我想调用我的 DomainService,创建一个新的工作线程,然后从服务返回,以便我的客户端可以开始轮询以查看长时间运行的查询是否完成。
我遇到的问题是,由于我的调用线程立即退出,当我的工作人员尝试访问任何实体时,我会抛出异常,因为 ObjectContext 在原始线程结束时被释放。
以下是我创建新上下文并从 Silverlight 客户端调用的方法:
MyDomainContext context = new MyDomainContext();
context.SearchAndStore(_myParm, SearchQuery,
p => {
if (p.HasError) { // Do some work and return to start
} // polling the server for completion...
}, null);
服务器上的入口方法:
[Invoke]
public int SearchAndStore(object parm)
{
Thread t = new Thread(new ParameterizedThreadStart(SearchThread));
t.Start(parms);
return 0;
// Once this method returns, I get ObjectContext already Disposed Exceptions
}
这是使用新线程调用的 WorkerProc 方法。一旦我尝试遍历我的 query1 对象,我就会得到 ObjectContext already Disposed 异常。
private void WorkerProc(object o)
{
HashSet<long> excludeList = new HashSet<long>();
var query1 = from doc in this.ObjectContext.Documents
join filters in this.ObjectContext.AppliedGlobalFilters
.Where(f => f.FilterId == 1)
on doc.FileExtension equals filters.FilterValue
select doc.FileId;
foreach (long fileId in query1) // Here occurs the exception because the
{ // Object Context is already disposed of.
excludeList.Add(fileId);
}
}
我怎样才能防止这种情况发生?有没有办法为新线程创建新的上下文?我真的坚持这个。
谢谢。