Метод iter класса Receiver
Метод iter класса Receiver возвращает итератор,
который последовательно принимает значения из канала.
Итератор завершается, когда все соответствующие отправители
Sender будут уничтожены и в канале не останется
сообщений. Метод не принимает параметров.
Синтаксис
receiver.iter()
Пример
Давайте создадим канал, отправим в него несколько значений и примем их с помощью итератора:
use std::sync::mpsc::channel;
fn main()
{
let (tx, rx) = channel();
tx.send(1).unwrap();
tx.send(2).unwrap();
tx.send(3).unwrap();
drop(tx);
for value in rx.iter() {
println!("{}", value);
}
}
Результат выполнения кода:
1
2
3
Пример
Давайте соберем все значения из канала в вектор
с помощью метода iter:
use std::sync::mpsc::channel;
fn main()
{
let (tx, rx) = channel();
tx.send("a").unwrap();
tx.send("b").unwrap();
tx.send("c").unwrap();
drop(tx);
let res: Vec<&str> = rx.iter().collect();
println!("{:?}", res);
}
Результат выполнения кода:
["a", "b", "c"]
Пример
Давайте отправим значения из отдельного потока и примем их с помощью итератора в основном потоке:
use std::sync::mpsc::channel;
use std::thread;
fn main()
{
let (tx, rx) = channel();
thread::spawn(move || {
tx.send(10).unwrap();
tx.send(20).unwrap();
tx.send(30).unwrap();
});
for value in rx.iter() {
println!("{}", value);
}
}
Результат выполнения кода:
10
20
30