我来自Threading with Parallel.For Adding Lists .对于链接中的示例,两个线程用于调用 Parallel.Invoke
这仍然很慢所以我想在循环内做一些多线程假设我不关心添加的订单项目.
但是 parallel.for
没有像预期的那样工作,并给出了 indexoutofRange 异常。
有人帮忙吗?
private static void Main(string[] args)
{
var dict1 = new Dictionary<int, string>();
var dict2 = new Dictionary<int, string>();
Stopwatch s = Stopwatch.StartNew();
Parallel.Invoke(() => FillDictionary(dict1, 10000000), () => FillDictionary(dict2, 10000000));
//FillDictionary(dict1, 10000000);
//FillDictionary(dict2, 10000000);
Console.WriteLine("test");
Console.WriteLine(s.Elapsed.TotalMilliseconds);
Console.ReadLine();
}
private static void FillDictionary(Dictionary<int, string> toFill, int itemCount)
{
//for (int i = 0; i < itemCount; i++)
//toFill.Add(i, "test" + i);
Parallel.For(0, itemCount, (i) => toFill.Add(i, "test" + i));
}
最佳答案
Dictionary
不是 thread safe .使用 ConcurrentDictionary<TKey, TValue>
相反。
关于c# - 如何使用 parallel.for 将项目添加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962384/