这是关于添加一个对像到一个缓存中的方式
我对这段代码的疑问是
既然已用了Lock使这段代码成为临界区,为什么用要lockWasSuccessful = Monitor.TryEnter(cacheItemBeforeLock)请高手解我心中疑问!            CacheItem cacheItemBeforeLock = null;
            bool lockWasSuccessful = false;            do
            {
                lock (inMemoryCache.SyncRoot)
                {
                    if (inMemoryCache.Contains(key) == false)
                    {
                        cacheItemBeforeLock = new CacheItem(key, addInProgressFlag, CacheItemPriority.NotRemovable, null);
                        inMemoryCache[key] = cacheItemBeforeLock;
                    }
                    else
                    {
                        cacheItemBeforeLock = (CacheItem)inMemoryCache[key];
                    }                    lockWasSuccessful = Monitor.TryEnter(cacheItemBeforeLock);
                }                if (lockWasSuccessful == false)
                {
                    Thread.Sleep(0);
                }
            } while (lockWasSuccessful == false);

解决方案 »

  1.   

    难道是怕别的代码块在另一个线程中访问了cacheItemBeforeLock?
      

  2.   

    看来分送不出去了,五点结贴!有用过Enterprise Library1.0的进来接个分!
      

  3.   

    我的想法是这样的:关键是lock (inMemoryCache.SyncRoot)这个范围的问题。Cache在对CatchItem进行操作的时候,不想对整个inMemoryCache进行同步锁定,这个粒度太大,太浪费资源。仅仅是估计。。呵对了,你也在研究这东东么?我也是地。我的blog是
    zhongkeruanjian.cnblogs.com