Lock определенной таблицы.

Shevassa

Client
Регистрация
24.01.2011
Сообщения
60
Благодарностей
30
Баллы
18
Здравствуйте, долгое время мучаюсь с проблемой. Есть шаблон, который использует множество таблиц, путь к которым указывается во входных настройках. Если я делаю обычный лок таблиц, то он работает в пределах всего зп, это мне не подходит, если использую локальный лок шаблона через using, то тоже не подходит, т.к при работе с таблицей по одному пути лок срабатывают и для потоков, которые работают совсем с другой таблицей. В итоге не понятно как сделать, чтобы лок ставился на определенный файл и другие потоки, которые "трогают" другой файл чтобы ничего не мешало. А то получается например 1 огромная таблица, с которой долгая работа, она в итоге блочит работу всем мелким таблицам и все ждут, хотя по факту это вообще другой файл, который никак не пересекается, просто лок объект одинаковый.

Т.е получается лок один, код везде одинаковый и фрагменты лока, но файлы разные и они вполне себе работали бы параллельно, если бы лочились не все таблицы, а конкретные. Может можно как-то в общем коде создать объект, который будет в себя включать имя таблицы или путь к ней например и по нему конкретно и лочило?

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

Shevassa

Client
Регистрация
24.01.2011
Сообщения
60
Благодарностей
30
Баллы
18
Судя по тестам, можно банально делать lock и внутрь помещать переменную, где будет путь к таблице... Но так в разных экземплярах шаблона если один путь, то лок работать не будет, но даже это лучше, чем потоки, которые ждут окончания работы с файлом, с которым они даже работать то не будут :-)
 
Последнее редактирование:

dihard

Client
Регистрация
08.11.2019
Сообщения
307
Благодарностей
48
Баллы
28
Попробуйте использывать FileShare.None
 

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
531
Благодарностей
137
Баллы
43
Можно лочить с использованием глобальных переменных. Но не уверен что динамическое создание имени переменной как путь к таблице прокатит... Но можно наверно в base64 перевести путь... В общем есть поле для экспериментов.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)