Не существует волшебной пули, которая позволила бы вам получить доступ к DataTable
из нескольких потоков без использования механизма синхронизации блокировки. Что я хотел бы сделать, так это держать замок как можно более коротким. Имейте в виду, что изменение любого объекта в иерархии таблицы данных потребует блокировки всей таблицы данных. Это связано с тем, что изменение значения столбца в DataRow
может изменить внутренние структуры индексации внутри родительского элемента DataTable
.
Итак, я хотел бы, чтобы производитель получил блокировку, добавил новую строку и снял блокировку. Затем в conumser вы получите такую же блокировку, скопируете данные, содержащиеся в DataRow
, в отдельную структуру данных, а затем немедленно снимите блокировку. Теперь вы можете работать с скопированными данными без механизмов синхронизации, поскольку они изолированы. После того, как вы завершили операцию над ним, вы снова получите блокировку, объедините изменения обратно в DataRow
, затем снимите блокировку и начните процесс заново.