Хорошо, поэтому я столкнулся с какой-то странной проблемой, и, честно говоря, у меня нет идей. Я хотел бросить это там, чтобы увидеть, не хватает ли я чего-то, что я сделал неправильно, или если ConcurrentDictionary работает неправильно. Вот код:ConcurrentDictionary - сломанный словарь или плохой код?
(Cache представляет собой класс, содержащий статические ConcurrentDictionary ключи)
Проблема заключается в том, что иногда tmp
является null
, вызывая TryRemove
линии для запуска, однако return null;
линия выше никогда не ударил , С тех пор return null
- единственное, что помещает null
в словарь, и он никогда не запускается, как мог tmp
когда-либо был null
?
Включая класс Cache (SetNames не используется этим кодом):
public class Cache
{
public static ConcurrentDictionary<Type, Info> Keys = new ConcurrentDictionary<Type, Info>();
public static ConcurrentDictionary<Type, string> SetNames = new ConcurrentDictionary<Type, string>();
}
Возможно, в словаре есть значение «null»? –
Сколько потоков работает с этим кодом? Это не похоже на потокобезопасность. – oleksii
@IlyaKogan - Нет, словарь пуст, когда он запускается и никогда не содержит нуль, даже когда попадает точка останова внутри 'if (tmp == null)'. –