C# · 12月 29, 2021

c# – 我如何用缓存键锁定?

我试图实现一个通用的线程安全的Cache方法,我想知道我应该如何实现它的锁.

它应该看起来像这样:

//private static readonly lockObject = new Object();public T GetCache<T>(string key,Func<T> valueFactory…){ // try to pull from cache here lock (lockObject) // I don’t want to use static object lock here because then every time a lock is performed,all cached objects in my site have to wait,regarding of the cache key. { // cache was empty before we got the lock,check again inside the lock // cache is still empty,so retreive the value here // store the value in the cache here } // return the cached value here}

有什么建议么?
谢谢,
阿米尔.

解决方法 这是您使用 mutex的情况 public T GetCache<T>(string key,Func<T> valueFactory…) { // note here that I use the key as the name of the mutex // also here you need to check that the key have no invalid charater // to used as mutex name. var mut = new Mutex(true,key); try { // Wait until it is safe to enter. mut.WaitOne(); // here you create your cache } finally { // Release the Mutex. mut.ReleaseMutex(); } }