Macro futures_util::stream_select [−][src]
macro_rules! stream_select {
($($tokens : tt) *) => { ... };
}
Expand description
Combines several streams, all producing the same Item
type, into one stream.
This is similar to select_all
but does not require the streams to all be the same type.
It also keeps the streams inline, and does not require Box<dyn Stream>
s to be allocated.
Streams passed to this macro must be Unpin
.
If multiple streams are ready, one will be pseudo randomly selected at runtime.
This macro is gated behind the async-await
feature of this library, which is activated by default.
Note that stream_select!
relies on proc-macro-hack
, and may require to set the compiler’s recursion
limit very high, e.g. #![recursion_limit="1024"]
.
Examples
use futures::{stream, StreamExt, stream_select};
let endless_ints = |i| stream::iter(vec![i].into_iter().cycle()).fuse();
let mut endless_numbers = stream_select!(endless_ints(1i32), endless_ints(2), endless_ints(3));
match endless_numbers.next().await {
Some(1) => println!("Got a 1"),
Some(2) => println!("Got a 2"),
Some(3) => println!("Got a 3"),
_ => unreachable!(),
}