【发布时间】:2012-03-27 21:08:59
【问题描述】:
我正在尝试创建一个与第三方 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
我做错了什么?
如果有更好的方法来完成我的任务,我愿意接受其他建议。
【问题讨论】:
标签: c# caching .net-4.0 memorycache