public AutoResetEventPool(int initPoolCount) { if (initPoolCount < 0) { throw new ArgumentOutOfRangeException("initPoolCount"); } cacheItemPool = new Dictionary <int, AutoResetEventItem>(); freeItemList = new Stack <AutoResetEventItem>(); for (int i = 0; i < initPoolCount; i++) { var tempItem = new AutoResetEventItem(); tempItem.LastUsedTime = DateTime.Now; freeItemList.Push(tempItem); } timer = new TimerEx(OnTimerCallback, 60000, null); timer.Start(); }
public AutoResetEventItem GetLockItem() { AutoResetEventItem autoItem = null; try { lock (lockerObj) { autoItem = freeItemList.Pop(); //cacheItemPool.Add(autoItem.ID, autoItem); } } catch (Exception) { autoItem = new AutoResetEventItem(); autoItem.LockStart += autoItem_LockStart; autoItem.UnLock += autoItem_UnLock; } autoItem.LastUsedTime = DateTime.Now; return(autoItem); }