#multithreading #thread-safety #enterprise-library #data-access-app-block
#многопоточность #потокобезопасность #enterprise-library #доступ к данным-приложение-блок
Вопрос:
У меня есть приложение, которое запускает несколько одновременных фоновых процессов для вставки данных в базу данных с использованием блока приложений доступа к данным корпоративной библиотеки. Каждый фоновый поток использует DatabaseFactory.CreateDatabase, передающий то же имя экземпляра базы данных. Ниже приведен фрагмент кода, который извлекает базу данных и командный объект:
Microsoft.Practices.EnterpriseLibrary.Data.Database database = DatabaseFactory.CreateDatabase(this.DatabaseInstanceName);
DbCommand commandObj = database.GetSqlStringCommand(statement);
Я обнаружил, что это не потокобезопасно, и я получаю ошибки из-за того, что значения перепутались в потоках. Как я должен справиться с этим, чтобы убедиться, что это потокобезопасно?
заранее спасибо!
Ответ №1:
Я нашел свою проблему. Значения, которые перепутывались между потоками, были связаны не с объектами доступа к данным корпоративной библиотеки, а с другим объектом, который я использовал для хранения параметров. Я случайно сделал его глобальным вместо локального ресурса в каждом потоке.