コード例 #1
0
ファイル: PortTest.cs プロジェクト: kumpera/Ccr
        public void DontRemoveOnetimeReceiversThatReturnFalse()
        {
            Task tk0 = new Task(()=>{});
            Task tk1 = new Task(()=>{});
            EvalTask rv0 = new EvalTask (true, tk0);
            VoidDispatcherQueue dq0 = new VoidDispatcherQueue ();
            rv0.TaskQueue = dq0;
            EvalTask rv1 = new EvalTask (false, tk1);
            VoidDispatcherQueue dq1 = new VoidDispatcherQueue ();
            rv1.TaskQueue = dq1;

            Port<int> port = new Port<int> ();
            IPortReceive ipr = port;

            ipr.RegisterReceiver (rv0);

            Assert.AreEqual (1, ipr.GetReceivers ().Length, "#1");
            port.Post (10);
            Assert.AreEqual (1, dq0.queuedTasks, "#2");
            Assert.AreEqual (0, ipr.GetReceivers ().Length, "#3");

            ipr.RegisterReceiver (rv1);
            Assert.AreEqual (1, ipr.GetReceivers ().Length, "#4");
            port.Post (10);
            Assert.AreEqual (1, dq1.queuedTasks, "#5");
            Assert.AreEqual (1, ipr.GetReceivers ().Length, "#6");
        }
コード例 #2
0
ファイル: PortTest.cs プロジェクト: kumpera/Ccr
        public void CleanedUpReceiverReturnsTask()
        {
            var p = new Port<int> ();
            IPortReceive ipr = p;
            VoidDispatcherQueue dq = new VoidDispatcherQueue ();
            ReceiverTask rt = new EvalTask (true, new NullTask ());
            rt.State = ReceiverTaskState.CleanedUp;
            rt.TaskQueue = dq;
            ipr.RegisterReceiver (rt);

            Assert.AreEqual (1, ipr.GetReceivers ().Length, "#1");
            p.Post (10);
            Assert.AreEqual (1, dq.queuedTasks, "#2");
            Assert.AreEqual (0, ipr.GetReceivers ().Length, "#3");
        }
コード例 #3
0
        public JObject SendAndEvaluateProgram(EvaluationScript es)
        {
            ManualResetEventSlim wh = new ManualResetEventSlim(false);

            es.Id = Guid.NewGuid().ToString();
            string send = JsonConvert.SerializeObject(es);

            var et = new EvalTask(send, wh);

            evalTaskBag.Add(et);
            evaluationThreadPool.EnqueueTask(et);

            wh.Wait();
            EvalTask help;

            if (!evalTaskBag.TryTake(out help))
            {
                Console.WriteLine("Could not remove item from bag!");
            }

            return(et.Result);
        }
コード例 #4
0
            public void EnqueueTask(EvalTask task)
            {
                lock (hasBeenStarted_locker) {
                    if (!hasBeenStarted)
                    {
                        for (int i = 0; i < workerCount; i++)
                        {
                            Thread t = new Thread(Consume)
                            {
                                IsBackground = true, Name = string.Format("EvaluationThreadPool worker {0}", i)
                            };
                            _workers.Add(t);
                            t.Start();
                        }
                        hasBeenStarted = true;
                    }
                }

                lock (_locker) {
                    _taskQueue.Enqueue(task);
                    Monitor.PulseAll(_locker);
                }
            }
コード例 #5
0
      public void EnqueueTask(EvalTask task) {
        lock (hasBeenStarted_locker) {
          if (!hasBeenStarted) {
            for (int i = 0; i < workerCount; i++) {
              Thread t = new Thread(Consume) { IsBackground = true, Name = string.Format("EvaluationThreadPool worker {0}", i) };
              _workers.Add(t);
              t.Start();
            }
            hasBeenStarted = true;
          }
        }

        lock (_locker) {
          _taskQueue.Enqueue(task);
          Monitor.PulseAll(_locker);
        }
      }
コード例 #6
0
    public JObject SendAndEvaluateProgram(EvaluationScript es) {
      ManualResetEventSlim wh = new ManualResetEventSlim(false);
      es.Id = Guid.NewGuid().ToString();
      string send = JsonConvert.SerializeObject(es);

      var et = new EvalTask(send, wh);

      evalTaskBag.Add(et);
      evaluationThreadPool.EnqueueTask(et);

      wh.Wait();
      EvalTask help;
      if (!evalTaskBag.TryTake(out help)) {
        Console.WriteLine("Could not remove item from bag!");
      }

      return et.Result;
    }
コード例 #7
0
ファイル: PortTest.cs プロジェクト: kumpera/Ccr
 public void UnRegisterReceiverIgnoreNonRegistered()
 {
     IPortReceive ipr = new Port<int> ();
     ReceiverTask rt = new EvalTask (true);
     ipr.UnregisterReceiver (rt);
 }
コード例 #8
0
ファイル: PortTest.cs プロジェクト: kumpera/Ccr
        public void UnRegisterReceiverChangesGetReceivers()
        {
            IPortReceive ipr = new Port<int> ();
            ReceiverTask rt = new EvalTask (true);

            Assert.AreEqual (0, ipr.GetReceivers ().Length, "#1");
            ipr.RegisterReceiver (rt);
            ipr.RegisterReceiver (rt);
            Assert.AreEqual (2, ipr.GetReceivers ().Length, "#3");
            ipr.UnregisterReceiver (rt);
            Assert.AreEqual (1, ipr.GetReceivers ().Length, "#4");
            ipr.UnregisterReceiver (rt);
            Assert.AreEqual (0, ipr.GetReceivers ().Length, "#5");
        }
コード例 #9
0
ファイル: PortTest.cs プロジェクト: kumpera/Ccr
        public void ScheduleAllTaskReturnedByEvaluate()
        {
            Task tk0 = new Task(()=>{});
            Task tk1 = new Task(()=>{});
            EvalTask rv0 = new EvalTask (false, tk0);
            VoidDispatcherQueue dq0 = new VoidDispatcherQueue ();
            rv0.TaskQueue = dq0;
            EvalTask rv1 = new EvalTask (false, tk1);
            VoidDispatcherQueue dq1 = new VoidDispatcherQueue ();
            rv1.TaskQueue = dq1;

            Port<int> port = new Port<int> ();
            IPortReceive ipr = port;

            ipr.RegisterReceiver (rv0);
            ipr.RegisterReceiver (rv1);

            port.Post (10);

            Assert.AreEqual (1, dq0.queuedTasks, "#1");
            Assert.AreEqual (1, dq1.queuedTasks, "#2");
            Assert.AreEqual (2, ipr.GetReceivers ().Length, "#3");
        }
コード例 #10
0
ファイル: PortTest.cs プロジェクト: kumpera/Ccr
        public void RegisterDuplicateTask()
        {
            var p = new Port<int> ();
            IPortReceive ipr = p;
            EvalTask a,b,c;
            ipr.RegisterReceiver (a = new EvalTask (false));
            ipr.RegisterReceiver (a);
            ipr.RegisterReceiver (b = new EvalTask (true));

            p.Post (10);
            Assert.AreEqual (2, a.tested, "#1");
            Assert.AreEqual (1, b.tested, "#2");
        }
コード例 #11
0
ファイル: PortTest.cs プロジェクト: kumpera/Ccr
        public void PostOnlyEvalUntilOneAccept()
        {
            var p = new Port<int> ();
            IPortReceive ipr = p;
            EvalTask a,b,c;
            ipr.RegisterReceiver (a = new EvalTask (false));
            ipr.RegisterReceiver (b = new EvalTask (true));
            ipr.RegisterReceiver (c = new EvalTask (false));

            p.Post (10);
            Assert.AreEqual (1, a.tested, "#1");
            Assert.AreEqual (1, b.tested, "#2");
            Assert.AreEqual (0, c.tested, "#3");
        }