2016-02-04 7 views
0

У меня огромный цикл Parallel.For. Проблема в том, что операции записи DataRow не являются многопоточными, поэтому мне нужно заблокировать присваивающие утверждения. Это не проблема для меня, за исключением того, что она выглядит уродливой, когда мне приходится блокировать все операции присваивания. Это выглядит так:Назначение блокировки DataRow

Parallel.For(0, ds.Tables["MyTable"].Rows.Count, i => 
lock (s_lockObject) 
{ 
    ds.Tables["MyTable"].Rows[i]["myValue1"] = myValue1; 
} 
//some operations 

lock (s_lockObject) 
{ 
    ds.Tables["MyTable"].Rows[i]["myValue2"] = myValue2; 
} 

//some operations 
lock (s_lockObject) 
{ 
    ds.Tables["MyTable"].Rows[i]["myValue3"] = myValue3; 
} 
}); 

Возможно, есть способ заблокировать назначение по умолчанию, например, написать некоторое расширение.

ответ

0

Если вы хотите избавиться от дублирующего кода, вы можете извлечь функцию для присвоения значения DataRow. Например:

public static class DataTableExtensions 
    { 
     public static void SetCellValue<T>(this DataTable table, int row, string col, T value) 
     { 
      lock (table) 
      { 
       table.Rows[row][col] = value; 
      } 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^