C# "lock" в многопотоке.

PROforum

Client
Регистрация
17.08.2014
Сообщения
252
Благодарностей
19
Баллы
18
Здравствуйте. Подскажите Нужно ли в этом коде ставить lock для многопотока или нет? Если да то в каком варианте правильно
C#:
lock(SyncObjects.TableSyncer) //Блокируем таблицу для работы в многопотоке
{

IZennoTable table = project.Tables["Аккаунты"];


for(int i = 0; i < table.RowCount; i++)
{
    if (table.GetCell("A", i).Contains(project.Variables["account"].Value))
    {
        return i;
    }
}
throw new Exception("Строка не найдена"); //ошибка, если не найден
}
C#:
IZennoTable table = project.Tables["Аккаунты"];

lock(SyncObjects.TableSyncer) //Блокируем таблицу для работы в многопотоке
{

for(int i = 0; i < table.RowCount; i++)
{
    if (table.GetCell("A", i).Contains(project.Variables["account"].Value))
    {
        return i;
    }
}
throw new Exception("Строка не найдена"); //ошибка, если не найден
}
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Тут лок ставить не обязательно, т.к. Вы только считываете данные, без их модификации.
 
  • Спасибо
Реакции: cmvvo и PROforum

PROforum

Client
Регистрация
17.08.2014
Сообщения
252
Благодарностей
19
Баллы
18
А если бы в коде происходила запись в таблицу привязанную к шаблону, то какой вариант правильный?
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Я особой разницы не вижу. Можно использовать оба варианта.
 
  • Спасибо
Реакции: PROforum

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
А если бы в коде происходила запись в таблицу привязанную к шаблону, то какой вариант правильный?
Лучше 2-й, т.к. в первом случае у тебя объявление таблицы идет в {} и в дальнейшем не сможешь к ней обратиться (т.е. придется её опять объявлять)
 
  • Спасибо
Реакции: PROforum и nicanil

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Желательно всегда использовать Лок. Потому что тут возможно ты только считыватель данные, а другой шаблон начал какие то изменения. В результате получаешь кашу.
Лок ресурсов не жрёт дополнительных, а если вдруг надо поработать без лока, так лучше специально потом убрать Лок в нужном месте и не беспокоится , поставил ли я где Лок или забыл.
 
  • Спасибо
Реакции: PROforum

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