在C#Concurrent Dictionary中,特别是签名。 。
public TValue GetOrAdd(TKey key, Func<TKey, TValue> valueFactory)
。 。 。我知道有可能多次调用valueFactory。多个返回值会发生什么变化?是否保证只有一个结果将被映射到字典中,或者是否有可能存在其他线程可以在字典中看到不同值的窗口?
答案 0 :(得分:1)
在反射器中查看valueFactory只会因为接受值而不是委托的内部方法而执行。在那之后,当我看不到它时,就好像你已经调用了接受值而不是委托的reguler重载。
所以基本上,委托的值被忽略,而不是映射到字典。字典中的值总是相同的,因为这样的线程总是看到相同的值(因为,使用GetOrAdd只映射了一个值)。
显然,如果使用AddOrUpdate更改值,值将会更新。