public void Setup(int maxTasksInPool, int tasksToFork)
 {
     AtomicInteger atomicVal = new AtomicInteger();
     IExecutorService execService = new LimitedTaskExecutorService(maxTasksInPool);
     ICollection<IFuture<int>> futures = new List<IFuture<int>>(tasksToFork);
     for (int i = 0; i < tasksToFork; i++)
     {
         var task = new FutureTask<int>(CallableUtils.FromFunc(() =>
         {
             Thread.Yield();
             Thread.Sleep(7);
             int value = atomicVal.IncrementAndGet();
             Thread.Yield();
             return value;
         }));
         IFuture<int> future = execService.submit(task);
         futures.Add(future);
     }
     var results = new List<int>();
     foreach (IFuture<int> future in futures)
     {
         int value = future.get();
         results.Add(value);
     }
     results.Sort();
     int prevValue = results[0];
     Console.WriteLine(prevValue);
     for (int i = 1; i < results.Count; i++)
     {
         Console.WriteLine(results[i]);
         Assert.AreEqual(prevValue + 1, results[i]);
         prevValue = results[i];
     }
     Assert.AreEqual(atomicVal.Get(), tasksToFork);
 }
        public void Setup(int maxTasksInPool, int tasksToFork)
        {
            AtomicInteger                atomicVal   = new AtomicInteger();
            IExecutorService             execService = new LimitedTaskExecutorService(maxTasksInPool);
            ICollection <IFuture <int> > futures     = new List <IFuture <int> >(tasksToFork);

            for (int i = 0; i < tasksToFork; i++)
            {
                var task = new FutureTask <int>(CallableUtils.FromFunc(() =>
                {
                    Thread.Yield();
                    Thread.Sleep(7);
                    int value = atomicVal.IncrementAndGet();
                    Thread.Yield();
                    return(value);
                }));
                IFuture <int> future = execService.submit(task);
                futures.Add(future);
            }
            var results = new List <int>();

            foreach (IFuture <int> future in futures)
            {
                int value = future.get();
                results.Add(value);
            }
            results.Sort();
            int prevValue = results[0];

            Console.WriteLine(prevValue);
            for (int i = 1; i < results.Count; i++)
            {
                Console.WriteLine(results[i]);
                Assert.AreEqual(prevValue + 1, results[i]);
                prevValue = results[i];
            }
            Assert.AreEqual(atomicVal.Get(), tasksToFork);
        }