C# asp.net自定义缓存依赖项,立即全部刷新

C# asp.net自定义缓存依赖项,立即全部刷新,c#,asp.net,caching,C#,Asp.net,Caching,我有一个自定义缓存依赖项 class MyCacheDependency : CacheDependency { private const int PoolInterval = 5000; private readonly Timer _timer; private readonly string _readedContent; public MyCacheDependency() { _timer = new Timer(CheckD

我有一个自定义缓存依赖项

class MyCacheDependency : CacheDependency
{
    private const int PoolInterval = 5000;
    private readonly Timer _timer;
    private readonly string _readedContent;

    public MyCacheDependency()
    {
        _timer = new Timer(CheckDependencyCallback, this, PoolInterval, PoolInterval);
        _readedContent = ReadContentFromFile();
    }

    private void CheckDependencyCallback(object sender)
    {
        lock (_timer)
        {
            if (_readedContent != ReadContentFromFile())
            {
                NotifyDependencyChanged(sender, EventArgs.Empty);
            }
        }
    }

    private static string ReadContentFromFile()
    {
        return File.ReadAllText(@"C:\file.txt");
    }

    protected override void DependencyDispose()
    {
        if (_timer != null) _timer.Dispose();

        base.DependencyDispose();
    }
}
它工作得很好,但是我想知道如何一次刷新所有对象。在这里,我将2个对象放入缓存

Insert(“c1”,“var1”,新的MyCacheDependency())

Insert(“c2”,“vae2”,新的MyCacheDependency())

这很好,但当c1检测到更改时,如何强制c2不要等待5秒进行检查,但我想在c1执行此操作时将其自身称为DependencyDispose


换句话说,如果c1检测到更改,c2也应该调用DependencyDispose

也许您可以添加一个静态事件,该事件将在CheckDependencyCallback()方法中触发。然后在MyCacheDependency的构造函数中附加一个eventhandler。触发事件时,可以从那里调用NotifyDependencyChanged或DependencyDispose。这样,所有MyCacheDependency对象都会对更改作出反应

class MyCacheDependency : CacheDependency
{
    private const int PoolInterval = 5000;
    private readonly Timer _timer;
    private readonly string _readedContent;

    public static event EventHandler MyEvent;

    public MyCacheDependency()
    {
        _timer = new Timer(CheckDependencyCallback, this, PoolInterval, PoolInterval);
        _readedContent = ReadContentFromFile();
        MyEvent += new EventHandler(MyEventHandler);
    }

   protected void MyEventHandler(object sender, EventArgs e) {
    NotifyDependencyChanged(sender, e);
   }

    private void CheckDependencyCallback(object sender)
    {
        lock (_timer)
        {
            if (_readedContent != ReadContentFromFile())
            {
                if(MyEvent!=null)
                    MyEvent(sender, EventArgs.Empty);
            }
        }
    }

    private static string ReadContentFromFile()
    {
        return File.ReadAllText(@"C:\file.txt");
    }

    protected override void DependencyDispose()
    {
        if (_timer != null) _timer.Dispose();

        base.DependencyDispose();
    }
}