ste 0.1.0-alpha.11

A single-threaded executor with some tricks up its sleeve.
use anyhow::anyhow;
use std::sync::Arc;
use std::thread;

fn main() -> anyhow::Result<()> {
    for _ in 0..100 {
        let thread = Arc::new(ste::spawn());

        let mut threads = Vec::new();

        for _ in 0..2 {
            let thread = thread.clone();

            let t = thread::spawn(move || {
                thread.submit(|| {
                    thread::sleep(std::time::Duration::from_millis(10));
                    panic!("trigger");
                })
            });

            threads.push(t);
        }

        for t in threads {
            assert!(t.join().is_err());
        }

        let thread = Arc::try_unwrap(thread).map_err(|_| anyhow!("unwrap failed"))?;
        thread.join();
    }

    Ok(())
}