如果多次调用GetOrAdd()ValueFactory,附加返回值会发生什么变化?

时间:2011-04-15 21:54:49

标签: c# concurrent-collections

在C#Concurrent Dictionary中,特别是签名。 。

public TValue GetOrAdd(TKey key, Func<TKey, TValue> valueFactory)

。 。 。我知道有可能多次调用valueFactory。多个返回值会发生什么变化?是否保证只有一个结果将被映射到字典中,或者是否有可能存在其他线程可以在字典中看到不同值的窗口?

1 个答案:

答案 0 :(得分:1)

在反射器中查看valueFactory只会因为接受值而不是委托的内部方法而执行。在那之后,当我看不到它时,就好像你已经调用了接受值而不是委托的reguler重载。

所以基本上,委托的值被忽略,而不是映射到字典。字典中的值总是相同的,因为这样的线程总是看到相同的值(因为,使用GetOrAdd只映射了一个值)。

显然,如果使用AddOrUpdate更改值,值将会更新。