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);
 }
Ejemplo n.º 2
0
 protected override IEnumerator PurchaseItemByCodeInternal(
     FutureTask<bool> future,
     string code,
     int count)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 3
0
 public void CancelButNotInterruptBeforeRun()
 {
     FutureTask<string> ft = new FutureTask<string>(new FooCallable1());
     Assert.IsTrue(ft.Cancel(false));
     ft.Run();
     Assert.IsTrue(ft.IsDone);
     Assert.IsTrue(ft.IsCancelled);
 }
Ejemplo n.º 4
0
 public void CancelAndInterruptTheRunningTask()
 {
     FutureTask<int> ft = new FutureTask<int>(new InmediatlyCallable(13));
     ft.Run();
     Assert.IsFalse(ft.Cancel(true));
     Assert.IsTrue(ft.IsDone);
     Assert.IsFalse(ft.IsCancelled);
 }
Ejemplo n.º 5
0
 protected override System.Collections.IEnumerator PurchaseInternal(
     FutureTask<bool> future,
     int count)
 {
     yield return Yields.WaitForNextPolling();
     future.Set(true);
     yield break;
 }
Ejemplo n.º 6
0
 public void CancelAndInterruptBeforeRun()
 {
     var ft = new FutureTask<string>(new FooCallable1());
     ft.Cancel(true);
     ft.Run();
     Assert.IsTrue(ft.IsDone);
     Assert.IsTrue(ft.IsCancelled);
 }
Ejemplo n.º 7
0
        public void CancelButNotInterruptBeforeRun()
        {
            var ft = new FutureTask <string>(new FooCallable1());

            Assert.IsTrue(ft.Cancel(false));
            ft.Run();
            Assert.IsTrue(ft.IsDone);
            Assert.IsTrue(ft.IsCancelled);
        }
Ejemplo n.º 8
0
 protected IEnumerator BoolFutureIntInternal(
     FutureTask<bool> future,
     int a)
 {
     for (int i = 0; i < a; i++)
         yield return i;
     future.Set(true);
     yield break;
 }
Ejemplo n.º 9
0
        public void CancelAndInterruptTheRunningTask()
        {
            var ft = new FutureTask <int>(new InmediatlyCallable(13));

            ft.Run();
            Assert.IsFalse(ft.Cancel(true));
            Assert.IsTrue(ft.IsDone);
            Assert.IsFalse(ft.IsCancelled);
        }
Ejemplo n.º 10
0
        protected override IEnumerator RetrieveItemByCodeInternal(
            FutureTask<ItemModel> future,
            string code)
        {
            ItemModel item;

            item = this._domain.ItemModel.Get();
            future.Set(item);
            yield break;
        }
Ejemplo n.º 11
0
 public void CancelButNotInterruptTheRunningTask()
 {
     //The Task takes 5 seconds.
     FutureTask<string> ft = new FutureTask<string>(new FooCallable1());
     Thread t = new Thread(ft.Run);
     t.Start();
     Thread.Sleep(100);
     Assert.IsTrue(ft.Cancel(false)); //Not interrupt because the task running
     t.Join();
     Assert.IsTrue(ft.IsDone);
     Assert.IsTrue(ft.IsCancelled);
 }
Ejemplo n.º 12
0
        public void CancelButNotInterruptTheRunningTask()
        {
            //The Task takes 5 seconds.
            var ft = new FutureTask <string>(new FooCallable1());
            var t  = new Thread(ft.Run);

            t.Start();
            Thread.Sleep(100);
            Assert.IsTrue(ft.Cancel(false));             //Not interrupt because the task running
            t.Join();
            Assert.IsTrue(ft.IsDone);
            Assert.IsTrue(ft.IsCancelled);
        }
Ejemplo n.º 13
0
        public void IsDoneIsCanceledAndGet()
        {
            var ft = new FutureTask <int>(new InmediatlyCallable(13));

            Assert.AreEqual(false, ft.IsDone);
            Assert.AreEqual(false, ft.IsCancelled);

            ft.Run();

            Assert.AreEqual(13, ft.Get());             //The result

            Assert.AreEqual(true, ft.IsDone);
            Assert.AreEqual(false, ft.IsCancelled);
        }
Ejemplo n.º 14
0
        public void IsDoneIsCanceledAndGet()
        {
            FutureTask<int> ft = new FutureTask<int>(new InmediatlyCallable(13));

            Assert.AreEqual(false, ft.IsDone);
            Assert.AreEqual(false, ft.IsCancelled);

            ft.Run();

            Assert.AreEqual(13, ft.Get()); //The result

            Assert.AreEqual(true, ft.IsDone);
            Assert.AreEqual(false, ft.IsCancelled);
        }
Ejemplo n.º 15
0
        protected override IEnumerator PurchaseItemByCodeInternal(
            FutureTask<bool> future,
            string code,
            int count)
        {
            ItemModel item;

            {
                Future<ItemModel> depend;

                depend = this.RetrieveItemByCode(code);
                yield return depend;
                if (future.IsCancelling) yield break;
                item = depend.Get();
            }
            {
                Future<bool> depend;

                depend = item.Purchase(count);
                yield return depend;
                if (future.IsCancelling) yield break;
                future.Set(depend.Get());
            }
        }
Ejemplo n.º 16
0
 protected IEnumerator StringNestedFutureIntIntInternal(
     FutureTask<string> future,
     int b,
     int a)
 {
     for (int i = 0; i < b; i++)
     {
         yield return "before";
         yield return this.BoolFutureInt(a);
         yield return "after";
     }
     yield return "done";
     future.Set("completed");
     yield break;
 }
Ejemplo n.º 17
0
        protected IEnumerator ContinuesInternal(
            FutureTask<bool> future,
            int depth,
            Type exception)
        {
            Future<bool> inner;

            inner = depth <= 0 ? this.Throws(exception) : this.ThrowsWrapper(depth - 1, exception);
            inner.FutureException += delegate(FutureExceptionEvent @event)
            {
                Assert.IsType(exception, @event.Exception);
                Assert.Equal(inner, @event.Future);
                return FutureProcess.Continue;
            };
            yield return inner;
            future.Set(true);
            yield break;
        }
Ejemplo n.º 18
0
 protected abstract IEnumerator PurchaseInternal(
     FutureTask<bool> future,
     int count);
Ejemplo n.º 19
0
 protected IEnumerator CancellableInternal(
     FutureTask<string> future,
     int depth)
 {
     if (future.IsCancelling) yield break;
     yield return depth << 1;
     if (future.IsCancelling) yield break;
     yield return (depth << 1) + 1;
     yield return this.Cancellable(depth + 1);
 }
Ejemplo n.º 20
0
 protected IEnumerator SetResultCountInternal(
     FutureTask<string> future,
     int count)
 {
     for (int i = 0; i < count; i++)
         future.Set(String.Format("count: {0:D}", i + 1));
     yield break;
 }
Ejemplo n.º 21
0
 protected abstract IEnumerator RetrieveItemByCodeInternal(
     FutureTask<ItemModel> future,
     string code);
Ejemplo n.º 22
0
 protected override IEnumerator RetrieveItemByCodeInternal(
     FutureTask<ItemModel> future,
     string code)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 23
0
 protected abstract IEnumerator PurchaseItemByCodeInternal(
     FutureTask<bool> future,
     string code,
     int count);