2015-02-10 1 views
6

ich eine schwierige Zeit. Wann immer ich den Rückruf definiere und setze, bekomme ich eine ArgumentException, dass der "CacheItemUpdateCallback muss Null sein". Warum muss es null sein? Ich sollte das einstellen können und dann den Rückruf bekommen.völlig unfähig, die UpdateCallback von System.Runtime.Caching zu definieren

Ich bekomme dies nicht bei der Verwendung der CacheEntryRemovedCallback Delegate. Das kann ich in all meinen Projekten zuverlässig reproduzieren. Mache ich etwas falsch? Hier ist eine kleine Beispielanwendung:

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) { } 
} 

Antwort

12

Laut Dokumentation sollten Sie Set statt Add verwendet werden.

MemoryCache.Add:

Die Add und AddOrGetExisting Verfahren Überlastungen unterstützen nicht die UpdateCallback Eigenschaft. Verwenden Sie stattdessen die Set-Methodenüberladungen, um die UpdateCallback-Eigenschaft für einen Cache-Eintrag festzulegen.

tatsächlich Nach problemlos funktionieren:

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

ausgezeichnet, das ist genau das, was ich suchte. – Chris

Verwandte Themen