Skip to main content

coro_manager/
coro_manager.rs

1// devela::examples::work::coro_manager
2//!
3
4use devela::{CoroManager, serr, sok};
5
6fn main() {
7    let mut cr = CoroManager::<char, String>::new();
8
9    for i in 1..=3 {
10        cr.push(|mut c| async move {
11            println!("> instance {i} NEW");
12
13            let mut count = 0;
14            loop {
15                let res = c.yield_ok('a').await?;
16                println!("  instance {i} A.{count} {res:?})");
17
18                let _res = c.yield_ok('b').await?;
19                println!("  instance {i} B {_res:?}");
20
21                if count > 2 {
22                    break;
23                }
24                count += 1;
25            }
26
27            println!("  instance {i} BYE!");
28
29            if i == 2 { serr(format!["instance {i} produced an error"]) } else { sok('x') }
30        });
31    }
32    cr.push(|mut c| async move {
33        println!("> instance 4 NEW");
34        for _n in 0..3 {
35            let _res = c.yield_err(format!["custom err"]).await?;
36        }
37        println!("  instance 4 BYE!");
38        None
39    });
40
41    println!("Running");
42    cr.run();
43    println!("Done");
44}