9

私はすでに答えを知っているのではないかと恐れています。サービスの呼び出しとキャッシュを処理するクラスがあります。同じリクエストでサービスを複数回呼び出すのを避けるために、もちろんコード ブロックの周りにロックを使用できます、これらのメソッドの多くは、キャッシュ キーを構成するさまざまな引数を持っています。完全に異なるキャッシュ キー (または複数の異なるキャッシュ キー) のロック コード ブロックが実行されるのを待つのは残念です。

キャッシュキー文字列自体をロックできることはわかっていますが、その文字列がどこにでも現れる可能性があることを考えると、これはノーノーです。

そのため、ロックなしで潜在的に不要なサービス呼び出しを実行するか、ロックを待機することによってメソッド内に潜在的に不要な遅延を追加することができます。

これらは私の唯一の2つのオプションですか、それとも別のオプションがありますか?

乾杯

4

1 に答える 1

7

場合によっては、タイプを切り替えて、 a などのスレッドセーフなクラスを使用しConcurrentDictionary<T,U>てキャッシュを処理することができます。適切に使用すると、並行コレクション自体に組み込まれたきめ細かなロックに依存できるため、(独自の) ロックの必要がなくなります。

于 2012-11-08T21:38:14.343 に答える