2014-02-27 61 views
0

當我使用DataTableParallel.ForEach,我得到:DataTable中拋出異常的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; 
} 

回答

4

DataTable不是線程安全的;您不能並行運行多個更新。

此類型對於多線程讀取操作是安全的。您必須同步任何寫入操作。