Функция channel
pub fn channel<T>(buffer: usize) -> (Sender<T>, Receiver<T>)
sync.Создаёт ограниченный канал mpsc для обмена данными между асинхронными задачами с обратным давлением.
Канал будет буферизовать указанное количество сообщений. Когда буфер заполнится, попытки отправить новые сообщения будут ожидать, пока сообщение не будет получено из канала. Ёмкость буфера должна быть не меньше 1.
Все данные, отправленные по Sender, станут доступны в Receiver в том же порядке, в котором они были отправлены.
Sender можно клонировать, чтобы send в тот же канал из нескольких мест в коде. Поддерживается только один Receiver.
Если Receiver отключён при попытке выполнить send, метод send вернёт SendError. Аналогично, если Sender отключён при попытке выполнить recv, метод recv вернёт None.
Паники
Вызывает панику, если ёмкость буфера равна 0 или слишком велика. В настоящее время максимальная ёмкость составляет Semaphore::MAX_PERMITS.
Примеры
use tokio::sync::mpsc;
let (tx, mut rx) = mpsc::channel(100);
tokio::spawn(async move {
for i in 0..10 {
if let Err(_) = tx.send(i).await {
println!("receiver dropped");
return;
}
}
});
while let Some(i) = rx.recv().await {
println!("got = {}", i);
}
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/sync/mpsc/fn.channel.html