stuck

crates.io docs.rs github-ci mit-license

Stuck is a multi-threading scheduled task facility building on cooperative stackful coroutine.

Examples

```rust use std::time::Duration;

use stuck::channel::parallel; use stuck::channel::prelude::*; use stuck::{select, task, time};

[stuck::main]

fn main() { let (mut tasksender, taskreceiver) = parallel::bounded(1); let (mut responsesender, mut responsereceiver) = parallel::bounded(1);

task::spawn(move || {
    for value in task_receiver.into_iter() {
        time::sleep(Duration::from_secs(1));
        response_sender.send(value - 1).unwrap();
    }
});

let mut tasks = vec![6, 6, 6, 6];

let mut sum = 0;
while !response_receiver.is_drained() {
    select! {
        r = <-response_receiver => {
            if let Some(n) = r {
                sum += n;
            }
        },
        _ = task_sender<-tasks.pop().unwrap(), if !tasks.is_empty() => {
            if tasks.is_empty() {
                task_sender.close();
            }
        },
    }
}
println!("sum: {}", sum);
assert_eq!(sum, 20);

} ```

See tests for more examples.

LICENSE

MIT

Inspiration