Tru*_*ill 5 c# caching .net-4.0 memorycache
我正在尝试创建与第三方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");
}
Run Code Online (Sandbox Code Playgroud)
如果我运行它,输出是:
fig
Run Code Online (Sandbox Code Playgroud)
它不输出"来到这里".
如果我注释掉以该行开头的行policy.UpdateCallback,则输出为:
null
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
如果有更好的方法来完成我的任务,我愿意接受其他建议.
我认为问题可能是Thread.Sleep因为这也会阻塞缓存,因为它们在同一线程中运行。如果您尝试创建虚拟循环,您将看到更新处理程序被触发:
var i = 0;
for (var j = 0; j < 10000000; j++)
{
for (var k = 0; k < 1000000; k++)
i++;
i--;
}
Console.WriteLine(i);
Run Code Online (Sandbox Code Playgroud)
而不是睡觉。
| 归档时间: |
|
| 查看次数: |
3377 次 |
| 最近记录: |