DataTable/DataSet への更新操作をスレッドセーフにしたいと考えています。DataTable のメソッドを使用してグローバル DataTable の最大 40 行をそれぞれ更新する最大 20 のスレッドがありRows.Find(pk)
ます。各スレッドは、DataTable の個別の行を更新します。
DataSet に次のラッパー クラスを使用しています。このアプローチはスレッドセーフですか?
public sealed class MyDataSet{
public static DataSet ds = new DataSet();
public static UpdateRow(key,data)
{
object _lock = new object();
DataRow dr = ds.Tables[0].Rows.Find(key);
lock(_lock){
dr.AcceptChanges();
dr.BeginEdit();
dr["col"] = data;
dr.EndEdit();
}
}
}
このメソッドはfor
ループから呼び出されます。
for(int x=0; x<40; x++;){
if(someCondition)
.
.
.
MyDataSet.UpdateRow(key,data);
.
.
.
}
すべてがマルチスレッド環境で行われます。UpdateRow メソッドはスレッドセーフですか?