pub fn new(initial_limit: usize) -> (Sender, Receiver)Expand description
Create a new pair of backpressure structures
These structures are called Sender
and Receiver similar to channels.
The Receiver should be used to throttle, either by applying
it to a stream or using it directly. The Sender is a way to create
throtting tokens (the stream is paused when there are tokens >= limit),
and to change the limit.
See ListenExt for example usage
ยงDirect Use Example
use async_listen::ListenExt;
use async_listen::backpressure;
let listener = TcpListener::bind("127.0.0.1:0").await?;
let (tx, mut rx) = backpressure::new(10);
let mut incoming = listener.incoming()
.handle_errors(Duration::from_millis(100));
loop {
rx.has_capacity().await;
let conn = match incoming.next().await {
Some(conn) => conn,
None => break,
};
let token = tx.token(); // should be created before spawn
task::spawn(async {
connection_loop(conn).await;
drop(token); // should be dropped after
});
}