Что происходит с дополнительным возвращаемым значением, если GetOrAdd () ValueFactory вызывается несколько раз? - PullRequest
0 голосов
/ 16 апреля 2011

В параллельном словаре C #, в частности, в подписи. , .

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

. , , Я знаю, что значение ValueFactory может быть вызвано несколько раз. Что происходит с несколькими возвращаемыми значениями? Гарантируется ли, что в словаре будет отображаться только один результат, или есть вероятность, что есть окно, в котором другие потоки могут видеть разные значения в словаре?

1 Ответ

1 голос
/ 16 апреля 2011

При просмотре в рефлекторе valueFactory выполняется только из-за внутреннего метода, который принимает значение, а не делегата.После этого, как я понимаю, все равно, что вы вызвали перегрузку регулятора, которая принимает значение, а не делегат.

, поэтому в основном значение из делегата игнорируется и не отображается в словаре,Значение в словаре всегда одинаково, и поскольку такие потоки всегда видят одно и то же значение (потому что при использовании GetOrAdd всегда отображается только одно значение).

Очевидно, что если вы измените значение с помощью значений AddOrUpdate, оно будет обновлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...