申し訳ありませんが、私は奇妙な小さな問題に直面しており、率直に言って私はアイデアがありません。私はこれをそこに投げ捨てて、私が間違っていたものがないか、またはConcurrentDictionaryが正しく動作していないかどうかを確認します。ここでは、コードです:ConcurrentDictionary - 辞書やコードが壊れていますか?
(キャッシュは、静的ConcurrentDictionaryキーを含むクラスである)
問題は時折tmp
を実行するためのTryRemove
ラインを引き起こし、null
で、まだ上記return null;
ラインがヒットされることはありませんということです。そのreturn null
はnull
を辞書に入れて実行する唯一のものなので、どうすればtmp
はnull
になりますか?
:あなたが戻ってcontext.GetKeys(key)
から設定された単一の項目以外のものを取得する場合
public class Cache
{
public static ConcurrentDictionary<Type, Info> Keys = new ConcurrentDictionary<Type, Info>();
public static ConcurrentDictionary<Type, string> SetNames = new ConcurrentDictionary<Type, string>();
}
多分、既に辞書に「ヌル」値がありますか? –
このコードを実行しているスレッドの数はいくつですか?スレッドセーフではないようです。 – oleksii
@IlyaKogan - いいえ、ディクショナリは起動時に空であり、 'if(tmp == null)'内のブレークポイントがヒットした場合でも、nullを含むことはありません。 –