Изменить (не заменить) значение ConcurrentDictionary - PullRequest
0 голосов
/ 14 февраля 2020

Я использую ConcurrentDictionary, который содержит строковый ключ и значение типа, который содержит свойства.

Я хочу обновить некоторые свойства значения потокобезопасным способом. Я много искал, но не смог найти решения, связанного с этой проблемой * 1013. *.

Существуют такие методы, как TryUpdate и AddOrUpdate, но они по существу заменяют предыдущее значение новым.

Каков наилучший способ установить свойство value без его замены?

Я думаю, что это должно быть сделано так:

ValueType oldVal = dict[key];
ValueType newVal = oldVal;
if (condition)
{
    newVal.prop1 = foo;
    newVal.prop2 = bar;
}
if (dict.TryUpdate(key, newVal, oldVal) == true)
    Success;
else
    Failure; //Another thread modified value first    

Есть ли лучший способ?

...