在被驱逐时,System.Runtime.Caching.MemoryCache会处理IDisposable项目吗?

时间:2013-06-06 18:19:54

标签: c# caching idisposable

我有一个构建器类,它创建一个实现IDisposable的实例。每当要构建的项目已经在缓存中时,构建器将返回该实例。我的问题是,缓存是否会在它们被驱逐时对其包含的IDisposable项调用Dispose()方法,还是必须在回调CacheItemPolicy.RemovedCallback上显式编码该行为?

1 个答案:

答案 0 :(得分:9)

未调用Dispose。它很容易测试。

public class TestClass : IDisposable
{
    public void Dispose()
    {
        Console.WriteLine("disposed");
    }
}

MemoryCache _MemoryCache = new MemoryCache("TEST");

void Test()
{
    _MemoryCache.Add("key",
                      new TestClass(),
                      new CacheItemPolicy()
                      {
                          AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10),
                          RemovedCallback = (_) => { Console.WriteLine("removed"); }
                      });

}