DataTable在Parallel.ForEach中抛出异常

时间:2014-02-27 10:48:41

标签: c# dataset task-parallel-library

DataTableParallel.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;
}

1 个答案:

答案 0 :(得分:4)

DataTable不是线程安全的;你无法并行运行多个更新。

  

此类型对于多线程读取操作是安全的。您必须同步任何写操作。