Блокировка контекста OData DataServiceContext при вызове из нескольких BackgroundWorkers

У меня есть приложение Silverlight 4, которое подключается к службе OData. Моя модель отправляет несколько запросов к службе параллельно, и в обратном вызове запроса я обрабатываю результаты, используя backgroundworker.

Это отлично работает, если я делаю один вызов, но как только я делаю более одного вызова параллельно - иногда это срабатывает - но большую часть времени я получаю исключение в контексте службы данных, когда вызываю EndExecute (похоже, когда он добавляет объекты в свой внутренний механизм отслеживания изменений .)

Итак, я решил заблокировать службу данных в точке, которую я вызываю EndExecute

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

Что устранило проблему и теперь надежно обрабатывает запросы данных.

У меня двоякий вопрос - рекомендуется ли это? Контекст OData не является потокобезопасным?

1
задан MIantosca 10 September 2010 в 14:25
поделиться