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

  • Автор темы Автор темы PROforum
  • Дата начала Дата начала

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("Строка не найдена"); //ошибка, если не найден
}
 
А если бы в коде происходила запись в таблицу привязанную к шаблону, то какой вариант правильный?
 
А если бы в коде происходила запись в таблицу привязанную к шаблону, то какой вариант правильный?
Лучше 2-й, т.к. в первом случае у тебя объявление таблицы идет в {} и в дальнейшем не сможешь к ней обратиться (т.е. придется её опять объявлять)
 
  • Спасибо
Реакции: PROforum и nicanil
Желательно всегда использовать Лок. Потому что тут возможно ты только считыватель данные, а другой шаблон начал какие то изменения. В результате получаешь кашу.
Лок ресурсов не жрёт дополнительных, а если вдруг надо поработать без лока, так лучше специально потом убрать Лок в нужном месте и не беспокоится , поставил ли я где Лок или забыл.
 
  • Спасибо
Реакции: PROforum

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