является DataTable.findBy() Потокобезопасен?

#.net #multithreading #datatable

#.net #многопоточность #datatable

Вопрос:

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

Комментарии:

1. Я не могу найти никаких упоминаний о методе findBy в MSDN ни для DataTable , ни для DataSet -ов. Не могли бы вы опубликовать пример кода, пожалуйста?

2. Кроме того, многопоточные приложения, требующие блокировки общих ресурсов, по-прежнему являются многопоточными приложениями…

3. @smudge: при блокировке в каждом методе не было бы большого количества потоков.

4. @Henk блокировка каждого метода не была бы правильным способом сделать ваше приложение потокобезопасным. Блокировки предназначены для общих ресурсов, будь то потокобезопасный доступ к переменным, доступ к файлам, доступ к сокету и т.д… Блокируйте ресурсы, а не весь рабочий процесс

5. верно, но это приложение, в частности, извлекает информацию из наборов данных, и это все.

Ответ №1:

Класс DataTable

Потокобезопасность

Этот тип безопасен для многопоточных операций чтения. Необходимо синхронизировать любые операции записи.

Источник: MSDN

Это должно ответить на ваш вопрос.

Комментарии:

1. В принципе, да, это должно ответить на вопрос. Но findBy — это сгенерированный метод в типизированных наборах данных, не совсем ясно, распространяется ли на него это обещание.

2. Йода, я просмотрел MSDN и увидел это предложение, но в Интернете я нашел парня, который говорит, что выбор в таблицах данных небезопасен для чтения. Вот ссылка: social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread /…

Ответ №2:

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

findBy не звучит так, как будто он изменяет данные. С другой стороны, как указал Matan

Выбор строк с использованием метода Select в DataTable (да, это может изменить DataTable, создав для него новый индекс).