MemoryCache.Add และ MemoryCache.Set แตกต่างกันอย่างไร


104

ฉันอ่านเอกสาร MSDNแต่ไม่เข้าใจจริงๆ

ฉันเชื่อว่าพฤติกรรมของSetคือ "แทนที่ที่มีอยู่หรือเพิ่ม" (atomically)

ถูกต้องหรือไม่

คำตอบ:


173

Addไม่ทำอะไรเลย (ส่งคืนfalse) หากมีค่าสำหรับคีย์นั้นอยู่แล้ว Setแทรกหรืออัปเดตตามความจำเป็น

Remove+ Addจะทิ้งช่องว่างไว้ตรงกลางเมื่อเธรดอื่นค้นหาคีย์นั้นจะไม่ได้รับเบาะแส ( Setไม่โดยทั่วไปการแลกเปลี่ยนจะเป็นอะตอม) ด้วยเหตุนี้ในขณะที่Setมีผลลัพธ์สุดท้ายเช่นเดียวกับRemove+ Addแต่ความแตกต่างของกลไกจึงมีความสำคัญเนื่องจากอาจส่งผลกระทบต่อผู้โทรรายอื่น

ตัวอย่างของAdd :

ส่งคืนค่า

ประเภท: System.Boolean true หากการแทรกสำเร็จหรือเป็นเท็จหากมีรายการในแคชที่มีคีย์เดียวกับคีย์อยู่แล้ว


1
ไม่setแทนที่นโยบายถ้ามีรายการอยู่แล้ว?
TS

1
ฉันเพิ่งเห็นข้อความเก่าเกือบปีของคุณฉันกำลังแก้ไขปัญหาที่คล้ายกัน การโอเวอร์โหลดของ SET ทั้งหมดจำเป็นต้องมีนโยบายดังนั้นคำตอบคือใช่
user2223142
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.