cogo 0.1.36

Rust Coroutine Library like go
Documentation
use std::sync::mpsc::RecvError;
use std::time::Duration;
use cogo::{err, go, select};
use cogo::coroutine::sleep;
use cogo::std::context::{CancelCtx, Canceler};
use cogo::std::errors::Error;

//TODO Context is not stable yet
fn main() {
    let mut ctx = CancelCtx::new_arc(None);
    ctx.cancel(Some(err!("EOF")));
    loop {
        let mut break_self = false;
        select! {
                Ok(v) = ctx.done().try_recv() =>{
                    println!("done");
                    break_self = true;
                }
        }
        if break_self {
            break;
        } else {
            println!("sleep 1s");
            sleep(Duration::from_secs(1));
        }
    }
}