デフォルトの日時値は、値をどこにも割り当てていない場合でも、日時列のランダムレコードのデータテーブルに表示されます

2020-06-30 c# multithreading datatable parallel-processing locking

DateTimeデータ型の列をいくつか追加するDataTableがありDataTable

このように: MyTable.Columns.Add("myDate",typeof(DateTime));

この列には値を割り当てていません。以下のように、MyTableに新しい行を追加しています。

DataRow dr=null;
dr=MyTable.NewRow();
dr["Name"]= "abc";//updating all the columns except datetime column in the same way.

lock(MyTable)//locking dt as this code is part of  
Parallel.ForEach
{
   MyTable.Rows.Add(dr);
   MyTable.AcceptChanges();
}

上記のParallel.ForEachループが完了した後、DateTime列の値を確認すると、ランダムレコードの値'01 -01-0001 12:00:00 AM 'が表示されます。

  • コードを実行するたびに、このデフォルトのDateTime値がさまざまなレコードに対して表示されます。
  • すべてのレコードでこの値がnullになる場合があります

デフォルトの値が[日付]列に表示される理由を理解できません。
これらのセルに何も設定しない場合でも、各セルの値は同じではありません。

この問題を取り除くために私を助けてください。

Answers

ADO.NETクラスは、マルチスレッドの書き込み操作に対して安全ではありません 。同期せずにParallel.ForEachを使用して、複数のスレッドからDataTableParallel.ForEachして更新することはできません。これを行うと、結果は定義されません。例外が発生したり、データが失われたり、データが破損したり、内部状態が破損したりする可能性があります。正確に何が起こるかは誰にもわかりませんが、結果が望ましい確率は非常にわずかです。

Related