use comrade::{ job::{JobDispatcher, JobOrder}, service::ServiceManager, worker, }; use crossbeam::channel::Receiver; #[worker] pub fn myfn(i: i32) -> i32 { i * 2 } #[worker] pub fn multiply(a: i32, b: i32) -> i32 { a * b } fn do_work(multiply: multiply_Scoped, myfn: myfn_Scoped) { for i in 0..10 { let x = multiply.call(i, i); println!("myfn {i} -> {x}"); let x = myfn.call(i); println!("myfn {i} -> {x}"); } } fn main() { env_logger::init(); let s = ServiceManager::new().mode(comrade::service::ServiceMode::Decay); let (s, multiply) = multiply_init_scoped(s); let (s, myfn_fn) = myfn_init_scoped(s); let s = s.spawn(); do_work(multiply, myfn_fn); s.join().unwrap(); let s = ServiceManager::new().mode(comrade::service::ServiceMode::Decay); let s = myfn_init(s); let s = s.spawn(); let x = myfn(55); println!("myfn {x}"); myfn_shutdown(); s.join().unwrap(); }