【发布时间】:2019-10-03 04:56:15
【问题描述】:
我在Reference Source 中阅读了 AddOrUpdate 方法的代码,发现如果 oldValue 和 newValue 相等,该方法无论如何都会进行更新。这是真的吗?我理解正确吗?因为它,该方法总是会锁定。
更新: 当我看到 AddOrUpdate 方法的代码时,我想“如果 oldValue 等于 newValue,为什么我们需要使用带锁的 TryUpdate?我们可以检查相等并返回如果值等于”因为它我问这个问题。
我明白为什么这个方法总是更新或添加,而不检查 oldValue 和 newValue 是否相等。 TValue 是对象,如果不覆盖equals方法,我们无法比较它。
因此,如果您希望 AddOrUpdate 在 oldValue 和 newValue 相等时不锁定 ConcurrentDictionary,则需要使用您的类创建方法。我不知道您如何使用泛型来做到这一点。
【问题讨论】:
-
什么是“做锁”?
-
因为方法 TryAdd 和方法 TryUpdate 会锁定。在 AddOrUpdate 方法中始终使用 TryAdd 或 TryUpdate。
-
是的,它总是 lock ,但是你为什么要问这个问题呢?
-
您提问的目的是什么?
Did i understand it correct,谁知道你是怎么理解的? -
因为方法本身不是原子的,并且用于比较的旧值此时可能是陈旧的。