2

私の英語でごめんなさい。だから、これが私がPLINQによってDataTableを更新しようとしている私の質問ですこれが私のコードです

DataTable table = new DataTable();

table.Columns.Add(new DataColumn("val", typeof(decimal)));

int N = 1000000;

for (int i = 0; i < N; i++) table.Rows.Add(new object[] { i });

table.AsEnumerable().AsParallel().ForAll(row => row["val"] = 3);

ただし、例外があります:「インデックスが範囲外でした。負ではなく、コレクションのサイズ未満である必要があります。パラメータ名:インデックス」

私を助けてください

4

2 に答える 2

3

さて、私は今あなたに並列の行を変更することDataTableはコーシャではないDataTableことをあなたに言うことができます(クラスのMSDNドキュメントから):

このタイプは、マルチスレッド読み取り操作に対して安全です。書き込み操作を同期する必要があります。

したがって、あなたが言及した特定の例外の原因は正確にはわかりませんが、サポートされていないため、実際にこれを試みるべきではないことを私は知っています。

于 2010-08-19T13:24:07.020 に答える
0

見つかった解決策:

table.AsEnumerable().AsParallel().ForAll(row => { lock(table)row["val"] = 3; });

しかし、その後-並列は意味がありません

于 2010-08-19T14:34:33.270 に答える