odpowiedź LukeH jest prawidłowe. Ponieważ inne odpowiedzi wskazują, że semantykę tej metody można interpretować inaczej, uważam, że warto zauważyć, że AddOrGetExisting
faktycznie będzie aktualizować istniejące wpisy pamięci podręcznej.
Więc ten kod
Console.WriteLine(MemoryCache.Default.AddOrGetExisting("test", "one", new CacheItemPolicy()) ?? "(null)");
Console.WriteLine(MemoryCache.Default.AddOrGetExisting("test", "two", new CacheItemPolicy()));
Console.WriteLine(MemoryCache.Default.AddOrGetExisting("test", "three", new CacheItemPolicy()));
wypisze
(null)
one
one
Inną rzeczą, aby mieć świadomość: Kiedy AddOrGetExisting
znajdzie istniejący wpis pamięci podręcznej, to będzie nie dysponowania CachePolicy przekazywane do połączenie. Może to być problematyczne, jeśli używasz niestandardowych monitorów zmian, które konfigurują drogie mechanizmy śledzenia zasobów. Zwykle, gdy wpis w pamięci podręcznej jest eksmitowany, system pamięci podręcznej wywołuje Dipose()
na swoim ChangeMonitors. Daje to możliwość wyrejestrowania wydarzeń i tym podobnych. Kiedy AddOrGetExisting
zwraca istniejący wpis, sam musisz to zrobić.
Przykład użycia w połączeniu z Lazy http://stackoverflow.com/a/15894928/1575281 –
Dobrze się cieszę, że nie jestem jedyny ... spodziewałem się uzyskać wartość, którą właśnie przekazałem powrót do pierwszego połączenia, nie ma wartości null –