0

在 C# 并发字典中,特别是签名 . . .

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

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

4

1 回答 1

1

在反射器中查看 valueFactory 仅由于接受值而不是委托的内部方法而执行。在那之后,正如我所理解的那样,就好像您调用了接受值而不是委托的调节器重载。

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

显然,如果您使用 AddOrUpdate 更改值,值将得到更新。

于 2011-04-15T22:09:45.453 回答