1

如果该值是一个集合,如何AddorUpdate在 ConcurrentDictionary 中实现以便我可以正确更新该值?

我担心的是,由于 TValue 是一种引用类型,我可能会遇到在竞争条件下多次调用 TValue 的情况。我自己会对此进行测试,但我的语法错误,所以我无法继续进行。

我必须改变什么才能使这项工作?

   public class TrustList :  ConcurrentDictionary<int, List<TrustRelationshipDetail>>
    {
        public void AddOrUpdateTrustDetail(TrustRelationshipDetail detail)
        {
            List<TrustRelationshipDetail> detailList = new List<TrustRelationshipDetail>();
            detailList.Add(detail);

            this.AddOrUpdate(detail.HierarchyDepth, detailList, (key, oldValue) =>   
            oldValue.Add(detail)  // <--- Compiler doesn't like this, and I think this may cause duplicates if this were to be called...
           );
        }
    }
4

1 回答 1

2

的目的AddOrUpdate()是用新值替换任何现有值。

由于您只需要获取现有值(以便随后对其进行修改),因此您需要GetOrAdd()

this.GetOrAdd(detail.HierarchyDepth, new ConcurrentBag<TrustRelationshipDetail>())
        .Add(detail);
于 2012-10-18T02:56:59.573 回答