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"); }
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"); }
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); }
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); } }
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; }
public void UnRegisterReceiverIgnoreNonRegistered() { IPortReceive ipr = new Port<int> (); ReceiverTask rt = new EvalTask (true); ipr.UnregisterReceiver (rt); }
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"); }
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"); }
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"); }
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"); }