Прием значения из канала в Rust
Прием блокирует поток, пока в очереди нет готового значения. Когда отправитель кладет число, ожидание заканчивается, и результат операции содержит это число. Так связывают работу двух участков программы без опроса очереди в цикле.
Сначала отправим значение, затем заберем его на стороне приемника:
use std::sync::mpsc;
fn main() {
let (tx, rx) = mpsc::channel();
match tx.send(7) {
Ok(()) => {}
Err(_) => {}
}
match rx.recv() {
Ok(v) => println!("{}", v),
Err(_) => println!("empty"),
}
}
На экране одна строка с числом 7.
Отправитель еще жив, поэтому прием видит
успех и достает значение из очереди.
Несколько значений забирают по очереди: каждый успешный прием снимает один элемент с головы очереди:
use std::sync::mpsc;
fn main() {
let (tx, rx) = mpsc::channel();
match tx.send(1) {
Ok(()) => {}
Err(_) => {}
}
match tx.send(2) {
Ok(()) => {}
Err(_) => {}
}
match rx.recv() {
Ok(v) => println!("first {}", v),
Err(_) => {}
}
match rx.recv() {
Ok(v) => println!("second {}", v),
Err(_) => {}
}
}
Дано число:
let num = 42;
Положите число в очередь, примите его один раз и выведите значение через сопоставление с вариантом успеха.
Даны числа:
let num1 = 3;
let num2 = 8;
Передайте оба числа подряд, затем дважды примите из очереди и напечатайте оба результата в порядке отправки.
Скажите, чем прием отличается от чтения готового элемента из вектора, если очередь пока пуста.