public void BasicPool_AcquireAndRelease()
        {
            var pool = new BasicPool <object>(() => new object());

            Assert.That(pool.PoolSize, Is.EqualTo(0));
            Assert.That(pool.ActiveInstanceCount, Is.EqualTo(0));

            var obj1 = pool.Acquire();

            Assert.That(pool.PoolSize, Is.EqualTo(0));
            Assert.That(pool.ActiveInstanceCount, Is.EqualTo(1));

            pool.Release(obj1);
            Assert.That(pool.PoolSize, Is.EqualTo(1));
            Assert.That(pool.ActiveInstanceCount, Is.EqualTo(0));

            var obj2 = pool.Acquire();

            Assert.That(pool.PoolSize, Is.EqualTo(0));
            Assert.That(pool.ActiveInstanceCount, Is.EqualTo(1));
            Assert.That(obj2, Is.EqualTo(obj1));
        }
Ejemplo n.º 2
0
        public int Schedule(TimeSpan delay, bool repeating, ScheduleCallback callback, object state)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("callback");
            }
            delay = TimeSpan.FromTicks(Math.Max(MinDelay.Ticks, Math.Min(MaxDelay.Ticks, delay.Ticks)));
            ScheduleEvent scheduleEvent = _pool.Acquire();

            scheduleEvent.Id        = _eventSequence++;
            scheduleEvent.Delay     = delay;
            scheduleEvent.StartTime = _timeNow;
            scheduleEvent.Repeat    = repeating;
            scheduleEvent.Cancelled = false;
            scheduleEvent.Callback  = callback;
            scheduleEvent.State     = state;
            _heap.Add(scheduleEvent);
            _lookup.Add(scheduleEvent.Id, scheduleEvent);
            return(scheduleEvent.Id);
        }