Я помогаю усовершенствовать приложение, и оно полно проблем параллелизма.Я пытаюсь проработать их и наткнулся на раздел, в котором используются DataTables.
Сам набор данных является статическим, общим для многих потоков.
Я знаю, что с помощью dt.Select ("... ") самому нужен оператор блокировки, иначе у вас возникнут проблемы при добавлении / удалении строк в таблицу данных.Однако, когда этот вызов возвращается, у вас есть массив объектов DataRow.
Я бы, очевидно, заблокировал эти строки, если бы обновил их, но если я просто читаю их, нужно ли им блокировать?
В принципе, учитывая, что в другом месте мы добавляем новыестроки и, возможно, обновление существующих строк, какие из них являются правильными:
lock (dtLock)
{
DataRow[] rows = dt.Select("...");
}
foreach(DataRow dr in rows)
{
// read statements only
}
или
lock (dtLock)
{
DataRow[] rows = dt.Select("...");
foreach(DataRow dr in rows)
{
// read statements only
}
}