macro_rules! select {
($($tokens:tt)*) => { ... };
}Expand description
Select multiple selectables simultaneously for reading and writing
select! supports four different clauses:
- pattern = <-reader[, if condition] => code,
- pattern = writer<-expression[, if condition] => code,
- default => code,
- complete => code,
Restrictions
readerandwritermust bemutidents but not expressions.patternmust be irrefutable.
Evaluation
- All conditions are evaluated before selection.
- Expressions to
writerare only evaluated if that branch is selected. completecase is run if all selectables are disabled or completed.defaultcase is run if no selectable is ready, or all selectables are disabled or completed in absent ofcomplete.
Panics
- Panic when all selectables are disabled or completed and there is no
defaultorcomplete.
Examples
use stuck::channel::serial;
use stuck::select;
#[stuck::main]
fn main() {
let (mut sender, mut receiver) = serial::bounded(1);
let mut sent = false;
let mut received = false;
loop {
select! {
_ = <-receiver => received = true,
_ = sender<-1, if !sent => sent = true,
default => break,
}
}
assert!(sent);
assert!(received);
}