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