DataTable 在 Parallel.ForEach 中引发异常

1 c# dataset task-parallel-library

当我使用DataTablewith时Parallel.ForEach,我得到:

指数超出范围。必须为非负数且小于集合的大小。

请帮我解决它。

static void Main(string[] args)
{
    DataTable dt = CreateTable();
    dt.Columns.Add("C");
    //Parallel.ForEach(Partitioner.Create(0, dt.Rows.Count), range =>
    //{
    //    for (int j = range.Item1; j < range.Item2; j++)
    //    {
    //         dt.Rows[j]["C"] = dt.Rows[j]["A"] + "-" + dt.Rows[j]["B"];
    //    }
    //});

    Parallel.ForEach(dt.AsEnumerable(), row =>
    {
        row["C"] = row["A"] + "-" + row["B"];                
    });
}

private static DataTable CreateTable()
{
    DataTable dataTable = new DataTable();
    dataTable.Columns.Add("A");
    dataTable.Columns.Add("B");
    for (int i = 0; i < 100000; i++)
    {
        dataTable.Rows.Add("A" + i, "B" + i);
    }
    return dataTable;
}
Run Code Online (Sandbox Code Playgroud)

Dou*_*las 5

DataTable不是线程安全的;您不能并行运行多个更新。

这种类型对于多线程读取操作是安全的。您必须同步所有写入操作。