У меня очень долгий запрос, который занимает слишком много времени, чтобы мой клиент оставался подключенным. Я хочу позвонить в свой 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);
}
}
Как я могу этого избежать? Есть ли способ создать новый контекст для нового потока? Я действительно застрял на этом.
Спасибо.