C# 是字典<;TKey,TValue>;。如果密钥已在字典中,是否设置项[TKey]属性线程安全?

C# 是字典<;TKey,TValue>;。如果密钥已在字典中,是否设置项[TKey]属性线程安全?,c#,dictionary,thread-safety,C#,Dictionary,Thread Safety,在做任何事情之前,我已经读过了,我不认为它回答了我的问题 我正在写一个更新字典值的方法。 我不会插入或删除任何键 我计划这样做: private static void Example(Dictionary<Individual, float> dict) { var keys = dict.Keys.ToArray(); Parallel.For(0, keys.Length, i => { v

在做任何事情之前,我已经读过了,我不认为它回答了我的问题

我正在写一个更新字典值的方法。 我不会插入或删除任何键

我计划这样做:

private static void Example(Dictionary<Individual, float> dict) {
            var keys = dict.Keys.ToArray();

            Parallel.For(0, keys.Length, i => {
                var key = keys[i];
                var newValue = DoHardMath(key);
                dict[key] = newValue;
            });         
        }
private静态无效示例(Dictionary dict){
var keys=dict.keys.ToArray();
Parallel.For(0,keys.Length,i=>{
var key=key[i];
var newValue=DoHardMath(键);
dict[key]=新值;
});         
}
这个线安全吗?
您的问题非常具体,但是
ConcurrentDictionary
可以避免焦虑

Docos网址:


    • 您的问题非常具体,但是
      ConcurrentDictionary
      可以避免焦虑

      Docos网址:


      不,您应该使用并发字典。您链接的问题的答案引用了“一本词典可以同时支持多个读者,只要集合未被修改。”,并且您将修改集合,因此……不清楚“修改集合”是什么意思,这就是我为什么问的原因。否。
      字典
      不是线程安全的。在您的情况下,它是安全的,因为您可以替换该值,而不会影响字典中的其他键/值对。如果多个线程使用同一个密钥,那么它是不安全的。如果添加或删除密钥,则不安全。记住
      dict[key]=newValue
      不存在,则code>将添加一个新条目。尽管如此,通常使用
      并发字典
      更安全-这样,当您以后编辑代码时,不会有任何令人不快的意外,并且忘记不应该添加/删除项。不,您应该使用并发字典。您链接的问题的答案引用了“一本词典可以同时支持多个读者,只要集合未被修改。”,并且您将修改集合,因此……不清楚“修改集合”是什么意思,这就是我为什么问的原因。否。
      字典
      不是线程安全的。在您的情况下,它是安全的,因为您可以替换该值,而不会影响字典中的其他键/值对。如果多个线程使用同一个密钥,那么它是不安全的。如果添加或删除密钥,则不安全。记住
      dict[key]=newValue
      不存在,则code>将添加一个新条目。综上所述,使用
      ConcurrentDictionary
      ,通常更安全——这样,当您以后编辑代码时,就不会有任何令人不快的意外,并且忘记了不应该添加/删除项目。