无法完全定义System.Runtime.Caching的UpdateCallback

11

我在使用System.Runtime.Caching库的CacheEntryUpdateCallback委托时遇到了困难。每当我定义并设置回调时,我都会收到一个ArgumentException,提示"CacheItemUpdateCallback必须为null"。为什么它必须为空?我应该能够设置这个并得到回调函数。

当我使用CacheEntryRemovedCallback委托时,我不会遇到这个问题。我可以在所有项目中可靠地复现这个问题。我做错了什么吗?这是一个小示例应用程序:

using System.Runtime.Caching;
class Program {
  static void Main(string[] args) {
    var policy = new CacheItemPolicy();
    policy.SlidingExpiration = TimeSpan.FromSeconds(10);

    // this works
    //policy.RemovedCallback = Removed;

    // this creates the exception
    policy.UpdateCallback = Update;

    MemoryCache.Default.Add("test", "123", policy);
    Console.Read();
  }

  static void Update(CacheEntryUpdateArguments arguments) { }
  static void Removed(CacheEntryRemovedArugments arguments) { }
}
1个回答

21

根据文档,你应该使用Set而不是Add

MemoryCache.Add:

AddAddOrGetExisting方法重载不支持UpdateCallback属性。因此,要为缓存条目设置UpdateCallback属性,请改用Set方法重载。

以下确实可以正常工作:

MemoryCache.Default.Set("test", "123", policy);

1
太棒了,这正是我在寻找的东西。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接