У меня есть приложение Silverlight 4, которое подключается к службе OData. Моя модель отправляет несколько запросов к службе параллельно, и в обратном вызове запроса я обрабатываю результаты, используя backgroundworker.
Это отлично работает, если я делаю один вызов, но как только я делаю более одного вызова параллельно - иногда это срабатывает - но большую часть времени я получаю исключение в контексте службы данных, когда вызываю EndExecute (похоже, когда он добавляет объекты в свой внутренний механизм отслеживания изменений .)
Итак, я решил заблокировать службу данных в точке, которую я вызываю EndExecute
lock (dataService)
{
results = query.EndExecute(queryCallback).ToList<Video>();
}
Что устранило проблему и теперь надежно обрабатывает запросы данных.
У меня двоякий вопрос - рекомендуется ли это? Контекст OData не является потокобезопасным?