サードパーティ API への接続のプールを作成しようとしていますが、接続が使用されていない場合、一定間隔で接続が期限切れになります。有効期限が切れると、サードパーティ API を介して切断する必要があります。
MemoryCache (System.Runtime.Caching) がこれを処理するように見えました。ただし、UpdateCallback は奇妙な動作をしているようです。
簡単な LINQPad の例:
void Main()
{
var cache = MemoryCache.Default;
var policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(1);
policy.UpdateCallback = Update;
cache.Set("figkey", "fig", policy);
Thread.Sleep(2000);
object result = cache.Get("figkey");
Console.WriteLine(result == null ? "null" : result);
}
public static void Update(CacheEntryUpdateArguments arguments)
{
Console.WriteLine("got here");
}
これを実行すると、出力は次のようになります。
fig
「ここに着いた」は出力しません。
で始まる行をコメントアウトするとpolicy.UpdateCallback
、出力は次のようになります。
null
私は何を間違っていますか?
私の仕事を達成するためのより良い方法があれば、私は別の提案を受け入れます.