public override void main() { ITaskPort <TestTaskPortType> task_port = Task_binding.TaskPort; Console.WriteLine(this.PeerRank + ": BEFORE LEFT INVOKE"); IActionFuture action_future_0; Thread t0 = task_port.invoke(TestTaskPortType.ACTION_0, reaction0, out action_future_0); IActionFuture action_future_1; Thread t1 = task_port.invoke(TestTaskPortType.ACTION_1, reaction1, out action_future_1); IActionFuture action_future_2; Thread t2 = task_port.invoke(TestTaskPortType.ACTION_2, reaction2, out action_future_2); IActionFutureSet action_future_set = action_future_0.createSet(); action_future_set.addAction(action_future_1); action_future_set.addAction(action_future_2); // action_future_set.waitAll (); while (action_future_set.Pending.Length > 0) { IActionFuture action_future = action_future_set.waitAny(); Console.WriteLine(this.PeerRank + ": LEFT WAIT ANY"); } Console.WriteLine(this.PeerRank + ": AFTER LEFT WAIT"); t0.Join(); t1.Join(); t2.Join(); Console.WriteLine(this.PeerRank + ": AFTER LEFT INVOKE"); }
public override void run() { int compid = Convert.ToInt32(compId); Console.WriteLine("Computing action " + action_id + " of port " + port_id + " of component " + compid + " whose handleid informed is " + handleId); ITaskBindingKind v = (ITaskBindingKind)Certifier.services.getPort(port_id); //Certifier.verify_actions.TryGetValue(compid, out v); //v.invoke (IVerify.VERIFY_PERFORM); v.invoke(action_id); IActionFutureSet future_iteration = null; IActionFuture future_conclusive = null; //v.invoke (IVerify.VERIFY_CONCLUSIVE, out future_conclusive); v.invoke("verify_conclusive", out future_conclusive); future_iteration = future_conclusive.createSet(); IActionFuture future_inconclusive = null; //v.invoke (IVerify.VERIFY_INCONCLUSIVE, out future_inconclusive); v.invoke("verify_inconclusive", out future_inconclusive); future_iteration.addAction(future_inconclusive); IActionFuture r = future_iteration.waitAny(); result = r == future_conclusive ? CerificationResult.Conclusive : CerificationResult.Inconclusive; }
public bool visit(SWLWorkflowChoice <bool> node) { IActionFutureSet future_list = null; IDictionary <IActionFuture, SWLWorkflow <bool> > dict_action_alt = new Dictionary <IActionFuture, SWLWorkflow <bool> > (); for (int i = 0; i < node.action_list.Length; i++) { string port_name = node.guard_list [i].Item1; string action_name = node.guard_list [i].Item2; ITaskBindingKind action_port = port(port_name); IActionFuture future_handle; action_port.invoke(action_name, out future_handle); if (future_list == null) { future_list = future_handle.createSet(); } else { future_list.addAction(future_handle); } dict_action_alt [future_handle] = node.action_list [i]; } IActionFuture ready_action = future_list.waitAny(); dict_action_alt [ready_action].accept(this); return(true); }
public override void main() { Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 1"); Task_binding_data.TraceFlag = Task_gusty0.TraceFlag = Task_gusty1.TraceFlag = Task_binding_step1.TraceFlag = Task_binding_split_first.TraceFlag = Task_binding_split_next.TraceFlag = true; Task_binding_data.TraceFlag = Task_binding_step1.TraceFlag = Task_binding_split_first.TraceFlag = Task_binding_split_next.TraceFlag = true; IActionFutureSet future_iteration = null; Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 2-1"); IActionFuture future_split_first_chunk_ready = null; Task_binding_split_first.invoke(ITaskPortAdvance.CHUNK_READY, out future_split_first_chunk_ready); int action_id_split_first_chunk_ready = future_split_first_chunk_ready.GetHashCode(); future_iteration = future_split_first_chunk_ready.createSet(); Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 2-2"); IActionFuture future_split_next_chunk_ready = null; Task_binding_split_next.invoke(ITaskPortAdvance.CHUNK_READY, out future_split_next_chunk_ready); int action_id_split_next_chunk_ready = future_split_next_chunk_ready.GetHashCode(); future_iteration.addAction(future_split_next_chunk_ready); Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 3"); IActionFuture future_gusty0_chunk_ready = null; Task_gusty0.invoke(ITaskPortAdvance.CHUNK_READY, out future_gusty0_chunk_ready); int action_id_gusty0_chunk_ready = future_gusty0_chunk_ready.GetHashCode(); future_iteration.addAction(future_gusty0_chunk_ready); Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 4"); IActionFuture future_step1_chunk_ready = null; Task_binding_step1.invoke(ITaskPortAdvance.CHUNK_READY, out future_step1_chunk_ready); int action_id_step1_chunk_ready = future_step1_chunk_ready.GetHashCode(); future_iteration.addAction(future_step1_chunk_ready); Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 4"); IActionFuture future_gusty1_chunk_ready = null; Task_gusty1.invoke(ITaskPortAdvance.CHUNK_READY, out future_gusty1_chunk_ready); int action_id_gusty1_chunk_ready = future_gusty1_chunk_ready.GetHashCode(); future_iteration.addAction(future_gusty1_chunk_ready); Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 5"); IActionFuture future_data_terminate = null; Task_binding_data.invoke(ITaskPortData.TERMINATE, out future_data_terminate); future_iteration.addAction(future_data_terminate); int action_id_data_terminate = future_data_terminate.GetHashCode(); Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 6-1"); Task_binding_data.invoke(ITaskPortData.READ_SOURCE); Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 6-2"); Task_binding_split_first.invoke(ITaskPortAdvance.READ_CHUNK); Task_binding_split_first.invoke(ITaskPortAdvance.PERFORM); Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 7"); IList <Thread> bag_of_tasks = new List <Thread> (); bool terminate = false; do { Console.WriteLine(this.ThisFacetInstance + "/" + this.Rank + ": WORKFLOW 8 - LOOP"); IActionFuture action = future_iteration.waitAny(); int action_id = action.GetHashCode(); if (action_id == action_id_split_first_chunk_ready) { Thread t1 = new Thread((ThreadStart) delegate() { Console.WriteLine("INVOKE GUSTY0 READ_CHUNK - BEFORE"); Task_gusty0.invoke(ITaskPortAdvance.READ_CHUNK); Console.WriteLine("INVOKE GUSTY0 READ_CHUNK - AFTER"); IActionFuture future_gusty0_perform = null; Thread thread_gusty0_perform = Task_gusty0.invoke(ITaskPortAdvance.PERFORM, gusty0_perform, out future_gusty0_perform); Console.WriteLine("END INVOKE SPLITTER CHUNK_READY"); }); bag_of_tasks.Add(t1); t1.Start(); Thread t2 = new Thread((ThreadStart) delegate() { Console.WriteLine("INVOKE SPLITTER READ_CHUNK"); Task_binding_split_first.invoke(ITaskPortAdvance.READ_CHUNK); Console.WriteLine("INVOKE SPLITTER PERFORM"); Task_binding_split_first.invoke(ITaskPortAdvance.PERFORM); Console.WriteLine("INVOKE SPLITTER READ_CHUNK/PERFORM - AFTER"); IActionFuture future_split_chunk_ready_ = null; Task_binding_split_first.invoke(ITaskPortAdvance.CHUNK_READY, out future_split_chunk_ready_); action_id_split_first_chunk_ready = future_split_chunk_ready_.GetHashCode(); future_iteration.addAction(future_split_chunk_ready_); }); Console.WriteLine("THREAD LAUNCHED 1"); bag_of_tasks.Add(t2); t2.Start(); } else if (action_id == action_id_gusty0_chunk_ready) { Task_gusty0.invoke(ITaskPortAdvance.CHUNK_READY, out future_gusty0_chunk_ready); action_id_gusty0_chunk_ready = future_gusty0_chunk_ready.GetHashCode(); future_iteration.addAction(future_gusty0_chunk_ready); Thread t = new Thread((ThreadStart) delegate() { Console.WriteLine("INVOKE STEP1 READ_CHUNK - BEFORE"); // 110 executados (o 48 completou nos pares, mas não progrediu aqui (????), motivo do erro. Task_binding_step1.invoke(ITaskPortAdvance.READ_CHUNK); // Console.WriteLine("INVOKE STEP1 READ_CHUNK - AFTER"); // 47 completados IActionFuture future_step1_perform = null; Thread thread_step1_perform = Task_binding_step1.invoke(ITaskPortAdvance.PERFORM, step1_perform, out future_step1_perform); Console.WriteLine("END INVOKE GUSTY0 CHUNK_READY"); }); t.Start(); bag_of_tasks.Add(t); Console.WriteLine("THREAD LAUNCHED 2"); } else if (action_id == action_id_step1_chunk_ready) { Task_binding_step1.invoke(ITaskPortAdvance.CHUNK_READY, out future_step1_chunk_ready); action_id_step1_chunk_ready = future_step1_chunk_ready.GetHashCode(); future_iteration.addAction(future_step1_chunk_ready); Thread t = new Thread((ThreadStart) delegate() { Console.WriteLine("INVOKE GUSTY1 READ_CHUNK - BEFORE"); Task_gusty1.invoke(ITaskPortAdvance.READ_CHUNK); // **** Console.WriteLine("INVOKE GUSTY1 READ_CHUNK - AFTER"); IActionFuture future_gusty1_perform = null; Thread thread_gusty1_perform = Task_gusty1.invoke(ITaskPortAdvance.PERFORM, gusty1_perform, out future_gusty1_perform); Console.WriteLine("END INVOKE STEP1 CHUNK_READY"); }); t.Start(); bag_of_tasks.Add(t); Console.WriteLine("THREAD LAUNCHED 3"); } else if (action_id == action_id_gusty1_chunk_ready) { Task_gusty1.invoke(ITaskPortAdvance.CHUNK_READY, out future_gusty1_chunk_ready); action_id_gusty1_chunk_ready = future_gusty1_chunk_ready.GetHashCode(); future_iteration.addAction(future_gusty1_chunk_ready); Thread t = new Thread((ThreadStart) delegate() { Console.WriteLine("INVOKE SPLITTER NEXT READ_CHUNK - BEFORE"); Task_binding_split_next.invoke(ITaskPortAdvance.READ_CHUNK); // **** Console.WriteLine("INVOKE SPLITTER NEXT READ_CHUNK - AFTER"); IActionFuture future_split_perform = null; Thread thread_split_perform = Task_binding_split_next.invoke(ITaskPortAdvance.PERFORM, split_perform, out future_split_perform); Console.WriteLine("END INVOKE GUSTY1 CHUNK_READY"); }); t.Start(); bag_of_tasks.Add(t); Console.WriteLine("THREAD LAUNCHED 4"); } else if (action_id == action_id_split_next_chunk_ready) { Thread t1 = new Thread((ThreadStart) delegate() { Console.WriteLine("INVOKE GUSTY0 READ_CHUNK NEXT - BEFORE"); Task_gusty0.invoke(ITaskPortAdvance.READ_CHUNK); // Console.WriteLine("INVOKE GUSTY0 READ_CHUNK NEXT - AFTER"); IActionFuture future_gusty0_perform = null; Thread thread_gusty0_perform = Task_gusty0.invoke(ITaskPortAdvance.PERFORM, gusty0_perform, out future_gusty0_perform); Console.WriteLine("END INVOKE SPLIT NEXT CHUNK_READY"); }); bag_of_tasks.Add(t1); t1.Start(); Thread t2 = new Thread((ThreadStart) delegate() { Console.WriteLine("INVOKE SPLITTER NEXT READ_CHUNK"); Task_binding_split_next.invoke(ITaskPortAdvance.READ_CHUNK); Console.WriteLine("INVOKE SPLITTER NEXT PERFORM"); Task_binding_split_next.invoke(ITaskPortAdvance.PERFORM); Console.WriteLine("INVOKE SPLITTER NEXT READ_CHUNK/PERFORM - AFTER"); IActionFuture future_split_next_chunk_ready_ = null; Task_binding_split_next.invoke(ITaskPortAdvance.CHUNK_READY, out future_split_next_chunk_ready_); action_id_split_next_chunk_ready = future_split_next_chunk_ready_.GetHashCode(); future_iteration.addAction(future_split_next_chunk_ready_); }); Console.WriteLine("THREAD LAUNCHED 1"); bag_of_tasks.Add(t2); t2.Start(); Console.WriteLine("THREAD LAUNCHED 5"); } else if (action_id == action_id_data_terminate) { Thread t = new Thread((ThreadStart) delegate() { Console.WriteLine("INVOKE DATA WRITE_SINK - BEFORE"); Task_binding_data.invoke(ITaskPortData.WRITE_SINK); Console.WriteLine("INVOKE DATA WRITE_SINK - AFTER"); terminate = true; }); t.Start(); bag_of_tasks.Add(t); Console.WriteLine("THREAD LAUNCHED 6"); } else { Console.WriteLine("UNEXPECTED ERROR: ACTION FUTURE NOT RECOGNIZED ! "); } } while (!terminate); Console.WriteLine("WORKFLOW FINISHED ! "); foreach (Thread t in bag_of_tasks) { t.Join(); } }