0
items.AsParallel().ForAll(i =>
{
string[] splitter = i.Split('\t');
Console.WriteLine(string.Format("Converted: {0} - {1} - {2}", splitter[0], splitter[1], splitter[2]));
productList.Add(Convert.ToInt32(splitter[0]), splitter[1] + "\t" + splitter[2]);
// the above line is where the error prompts
});

“items”是一个 ConcurrentStack,它的值是产品 id、名称和详细信息,由选项卡分隔。

前任:

items[0] = 1\tshampoo\t清洁你的头发

我有一个并行循环,将项目拆分为 3 个数组索引(拆分器),然后将其添加到“productList”,“productList”是一个 SortedList。当我将拆分后的值添加到 productList 时,id 现在应该是键,名称 + 详细信息是值。

前任:

分离器 [0] = 1; 分离器[1] = 洗发水;splitter[2] = 清洁头发

产品列表 [0] 键 = 1;productList[1] value = 洗发水\t清洁你的头发

奇怪的是,有时程序运行完美,有时会提示错误 ArgumentException is unhandled by user code error。这是错误的详细信息:“偏移量和长度超出了数组的范围或计数大于从索引到源集合末尾的元素数。”。使用并行与此有关吗?问题是我必须使用并行来更快地执行循环。

注:数据仅为样本。

更新:我尝试使用 var splitter 更改 string[] 拆分器并收到此错误:“目标数组不够长。检查 destIndex 和长度,以及数组的下限。”。我在即时窗口中检查了产品列表,并在出现此错误之前添加了一些数据。

4

0 回答 0