возможно ли в многопоточности, что словарь возвращает неправильные значения c # - PullRequest
0 голосов
/ 28 мая 2019

У меня есть словарь ac # в многопоточной среде.Я использую TryGetValue для чтения без блокировки, и в тот же момент словарь реорганизуется.Можно ли получить совершенно другое значение, не связанное с этим ключом?Я имею в виду не просто значение, которое не является актуальным, но значение, которое совершенно неверно и соответствует другому ключу.

public static bool ChangeKey<TKey, TValue>(this IDictionary<TKey, TValue> dict,
                                       TKey oldKey, TKey newKey)
    {
        TValue value;
        if (!dict.TryGetValue(oldKey, out value))
            return false;

        dict.Remove(oldKey);  // do not change order
        dict[newKey] = value;  // or dict.Add(newKey, value) depending on ur comfort
        return true;
    }

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Нет, невозможно получить другое значение из словаря. Если TryGetValue возвращает true, тогда значение должно быть правильным.

Почему бы не использовать ConcurrentDictionar? ConcurrentDictionary - это многопоточная реализация словаря

0 голосов
/ 04 июня 2019

Использовал ConcurrentDictionary, как предложено выше ... Это решило мою проблему ..

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