Jaka jest różnica między MemoryCache.Add i MemoryCache.Set?

104

Przeczytałem dokumentację MSDN, ale tak naprawdę jej nie rozumiałem.

Uważam, że zachowanie Setjest „zastąp istniejące lub dodaj” (atomowo).

Czy to jest poprawne?

Burza
źródło

Odpowiedzi:

173

Addnic nie robi (zwraca false), jeśli istnieje już wartość dla tego klucza. Setw razie potrzeby wprowadza lub aktualizuje.

Remove+ Addpozostawiłoby lukę w środku, gdy inny wątek pytający o ten klucz nie dostałby żadnej wskazówki ( Setnie; wymiana jest zwykle atomowa); jako taki, chociaż Setma ten sam wynik końcowy co Remove+ Add, różnica w mechanizmach jest ważna, ponieważ może wpływać na innych rozmówców.

Na przykład Add :

Wartość zwracana

Wpisz: System.Boolean true, jeśli wstawienie powiodło się lub false, jeśli istnieje już wpis w pamięci podręcznej, który ma ten sam klucz co klucz.

Marc Gravell
źródło
1
Czy setzastępuje zasady, jeśli przedmiot istnieje?
TS
1
Właśnie zobaczyłem twoją prawie roczną wiadomość, pracuję nad podobnym problemem. Wszystkie przeciążenia zestawu SET wymagają zasad, więc odpowiedź brzmi tak.
user2223142