C# · 12月 29, 2021

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



//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(); } }