在c#并发字典中,特别是签名…
public TValue GetOrAdd(TKey key, Func<TKey, TValue> valueFactory)
…我知道valueFactory可能被多次调用。但是,多个返回值会发生什么?是否保证只有一个结果将被映射到字典中,或者是否有可能存在一个窗口,其他线程可以在该窗口中看到字典中的不同值?
查看反射器,valueFactory只因为内部方法接受值而不是委托而被执行。在此之后,据我所知,就好像你调用了接受值而不是委托的规则重载。
基本上,来自委托的值会被忽略,不会映射到字典。字典中的值总是相同的,因此线程总是看到相同的值(因为使用GetOrAdd只映射一个值)。
显然,如果你使用AddOrUpdate改变值,值将得到更新