rust_asio 0.6.0

Asynchronous I/O library
Documentation
extern crate asyncio;
use std::io;
use std::sync::{Arc, Mutex};
use std::time::Duration;
use asyncio::*;

static mut GOAL_COUNT: usize = 0;

fn on_wait(_: Arc<Mutex<SteadyTimer>>, res: io::Result<()>) {
    if let Ok(_) = res {
        println!("on_wait {}", unsafe { GOAL_COUNT });
        unsafe { GOAL_COUNT += 1; }
    } else {
        panic!("{:?}", res);
    }
}

#[test]
fn main() {
    let ctx = &IoContext::new().unwrap();
    for t in 0..10 {
        let timer = Arc::new(Mutex::new(SteadyTimer::new(ctx)));
        timer.lock().unwrap()
            .expires_from_now(Duration::new(0, t * 1000))
            .async_wait(wrap(on_wait, &timer));
    }
    ctx.run();
    assert_eq!(unsafe { GOAL_COUNT }, 10);
}