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 qid2 = pool.insert_queue(&Queue::new()).unwrap();
let submitter1 = pool.task_submitter(qid1).unwrap();
let submitter2 = pool.task_submitter(qid2).unwrap();
add_task(&submitter1,&submitter2);
pool.spawn_thread_for(qid1);
pool.spawn_thread_for(qid1);
pool.spawn_thread_for(qid2);
pool.join();
}
fn add_task(submitter1:&TaskSubmitter, submitter2:&TaskSubmitter) {
submitter1.submit((||println!("task='free': Hi, I'm free#11, 1 2 ..")).into_task());
submitter1.submit((||println!("task='free': Hi, I'm free#12, 1 2 ..")).into_task());
submitter2.submit((||println!("task='free': Hi, I'm free#2, 3 4 ..")).into_task());
let exit = submitter1.try_submit(
(|_:i32| {println!("task='exit2': exit");})
.into_exit_task()
).unwrap();
let exit = submitter1.try_submit(
(|_:i32| {println!("task='exit1': exit and then pass (1) => task='exit2'");1})
.into_exit_task().bind_to(exit.input_ca::<0>())
).unwrap();
let add = submitter1.try_submit(
(|a:i32,b:i32|{println!("task='add': ({a:?} + {b:?}) and then pass ({}) => task='exit'",a+b);a+b})
.into_task().bind_to(exit.input_ca::<0>())
).unwrap();
let b1 = submitter1.try_submit(
(|a:i32|{println!("task='B1': recv ({a}) and then pass ({a}) => task='add'");a})
.into_task().bind_to(add.input_ca::<0>())
).unwrap();
let b2 = submitter1.try_submit(
(|a:i32|{println!("task='B2': recv ({a}) and then pass ({a}) => task='add'");a})
.into_task().bind_to(add.input_ca::<1>())
).unwrap();
let exit3 = submitter2.try_submit(
(|_:usize| {println!("task='exit3': exit");})
.into_exit_task()
).unwrap();
let count = submitter2.try_submit(
(|a:&str|{println!("task='count': ({a:?}) and then pass ({}) => task='exit3'",a.len());a.len()})
.into_task().bind_to(exit3.input_ca::<0>())
).unwrap();
let _ = submitter2.try_submit(
(||{println!("task='params': pass (1,2,'123456789') to task=['B1','B2','count']");1})
.into_task().map_tuple_with(
move |_:i32| (1, 2, "123456789",)
)
.bind_all_to((b1.input_ca(),b2.input_ca(),count.input_ca()))
);
}