ความปลอดภัยของเธรด MemoryCache จำเป็นต้องล็อคหรือไม่?
สำหรับผู้เริ่มต้นให้ฉันโยนมันออกไปที่นั่นฉันรู้ว่ารหัสด้านล่างไม่ปลอดภัยสำหรับเธรด (การแก้ไข: อาจจะ) สิ่งที่ฉันกำลังดิ้นรนคือการค้นหาการใช้งานที่เป็นจริงและเป็นสิ่งที่ฉันสามารถทำได้จริงภายใต้การทดสอบ ฉันกำลังปรับโครงสร้างโครงการ WCF ขนาดใหญ่ในขณะนี้ที่ต้องการข้อมูลแบบคงที่ (ส่วนใหญ่) แคชและสร้างจากฐานข้อมูล SQL จำเป็นต้องหมดอายุและ "รีเฟรช" อย่างน้อยวันละครั้งซึ่งเป็นสาเหตุที่ฉันใช้ MemoryCache ฉันรู้ว่ารหัสด้านล่างไม่ควรเป็นเธรดที่ปลอดภัย แต่ฉันไม่สามารถทำให้มันล้มเหลวภายใต้ภาระงานหนักและทำให้เรื่องซับซ้อนขึ้นการค้นหาของ Google จะแสดงการใช้งานทั้งสองวิธี (มีและไม่มีการล็อกรวมกับการอภิปรายว่าจำเป็นหรือไม่ ใครบางคนที่มีความรู้เกี่ยวกับ MemoryCache ในสภาพแวดล้อมแบบมัลติเธรดจะแจ้งให้ฉันทราบอย่างชัดเจนว่าฉันจำเป็นต้องล็อคตำแหน่งที่เหมาะสมหรือไม่เพื่อให้การเรียกเพื่อลบ (ซึ่งแทบจะไม่ถูกเรียก แต่เป็นข้อกำหนด) จะไม่ถูกโยนในระหว่างการเรียกค้น / การจัดตำแหน่งใหม่ public class MemoryCacheService : IMemoryCacheService { private const string PunctuationMapCacheKey = "punctuationMaps"; private static readonly ObjectCache Cache; private readonly IAdoNet _adoNet; static MemoryCacheService() …