c# - 如何使用 parallel.for 将项目添加到列表

标签 c# multithreading parallel.for

我来自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/

相关文章:

c# - 从 WebApi 返回图像

c# - OData 和自定义 WCF WebGet 方法

c# - 调试时如何查看IEnumerable的元素?

python - python锁如何知道要锁定哪个资源或对象? (理论上)

c++ - 每 X 秒执行一次代码,但在事件发生时立即中断?

c# - 实现并行无限循环的最佳方法是什么?

c++ - cpp 中的并行 openMP 循环

c# - 将 docker 环境变量传递给 .net core

C-Linux 内核 : Closing two kthreads freezes machine

c - OpenMP 循环并行化