use taskorch::{Pool, Queue, TaskBuildNew, TaskSubmitter};
fn main() {
println!("----- test task orch -----");
let mut pool = Pool::new();
let qid1 = pool.insert_queue(&Queue::new()).unwrap();
let submitter1 = pool.task_submitter(qid1).unwrap();
pool.spawn_thread_for(qid1);
consume_task_prompt(&submitter1);
std::thread::spawn(||{
produce_task(submitter1);
});
pool.join();
}
fn consume_task_prompt(submitter:&TaskSubmitter) {
submitter.submit((||println!("Init: waiting task to do")).into_task());
}
fn produce_task(submitter:TaskSubmitter) {
prompt("hello");
submitter.submit((||println!("consmue task='hello': hello everyone!")).into_task());
prompt("exit");
let id_exit = submitter.submit((|a:i32|println!("consume task='exit': recv cond={a} and exit.")).into_exit_task())
.take();
prompt("add");
let id_add = submitter.submit(
(|a:i32,b:i32|{
println!("consume task='add': ({a},{b}) and then pass (r={}) to Task='exit'",a+b);
a+b
}).into_task().bind_to(id_exit.input_ca::<0>())
).take();
prompt("params");
let _ = submitter.submit(
(||{println!("consume task='params': pass (1,2) to task='add'");1},10.into())
.into_task()
.map_tuple_with(move|_:i32| (1,2))
.bind_all_to((id_add.input_ca::<0>(),id_add.input_ca::<1>()))
);
}
fn prompt(taskname:&'static str) {
println!("produce task='{taskname}'.");
}