作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试创建一个连接到第三方 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
它不输出“got here”。
如果我注释掉以 policy.UpdateCallback
开头的行,输出为:
null
我做错了什么?
如果有更好的方法来完成我的任务,我愿意接受其他建议。
最佳答案
我认为问题可能出在 Thread.Sleep
上,因为这也会阻塞缓存,因为它们在同一个线程中运行。如果您尝试创建虚拟循环,您会发现更新处理程序已被触发:
var i = 0;
for (var j = 0; j < 10000000; j++)
{
for (var k = 0; k < 1000000; k++)
i++;
i--;
}
Console.WriteLine(i);
代替 sleep 。
关于c# - MemoryCache UpdateCallback 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650614/
我正在尝试创建一个连接到第三方 API 的连接池,如果连接未被使用,则连接会在一段时间后过期。当它们过期时,需要通过第三方 API 断开连接。 似乎 MemoryCache (System.Runti
我有一个使用 postsharp 实现的简单缓存属性。当我设置缓存策略时,我希望能够设置如下所示的更新回调。 private static CacheItemPolicy GetCachePolic
我是一名优秀的程序员,十分优秀!