2014-01-22 4 views
0

У меня есть асинхронный сервер, который получает запрос от приложений для данных, сервер порождает поток для каждого запроса, который отключается и выполняет логику, и отправляет ответ приложению по завершении.Параллельный доступ к статическому адаптеру таблицы

Логика данных поступает из другой версии программного обеспечения, предназначенной для запуска на локальной машине. Запросы обрабатываются на стороне клиентов и потоки данных с сервера SQL. По этой причине все используемые адаптеры таблицы являются статическими, что работает в этой ситуации, но вызывает некоторые проблемы для моего приложения.

Приложение запрашивает данные, но фактическая логика адаптера таблицы выполняется на сервере, поэтому мы имеем несколько потоков, обращающихся к одному и тому же адаптеру таблицы, и бросаем исключения из этого места.

Я в затруднении, я попытался создать новый адаптер для каждого уникального запроса потока, но он вызывает команду, уже используемую открытым адаптером таблицы. Я также попробовал создать новый AppDomain для функций, получающих доступ к статическому адаптеру, но в итоге они ничего не делают/сбой (не совсем уверен, поскольку я не могу их отслеживать).

Вкратце, пытаясь получить доступ к статическому адаптеру таблицы для нескольких потоков. Любые предложения были бы полезны, но переписать логику данных на самом деле невозможно. Я рад предоставить код для разных сегментов по запросу, но на данный момент это похоже на теорию.

+0

Какой сервер? WCF имеет ConcurrencyMode. –

+0

Это асинхронный TCP-сервер, использующий мою собственную структуру битовых пакетов. – iambeanie

ответ

1

Если есть только один адаптер, тогда только один поток может использовать его за раз. Таким образом, вам нужно будет синхронизировать доступ к нему, чтобы только один поток обращался к нему за раз. Вы могли бы обернуть доступ к адаптеру в методе, который включает оператор «lock», тем самым блокируя любые последующие потоки до тех пор, пока текущий поток не завершится.

+0

Тогда это, как я боялся. Я надеялся избежать этого, поскольку есть несколько тысяч адаптеров, но я согласен, что это сработает. – iambeanie

+0

Не тот ответ, который я ищу: P, но правильный ответ. Изучая использование ThreadLocal для адаптеров на данный момент, но если это не удается, я, скорее всего, придется переписать логику данных для использования блокировки. – iambeanie

Смежные вопросы