Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpChRv 135 of 288 menu
◀ ▶

Прием значения из канала в 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;

Передайте оба числа подряд, затем дважды примите из очереди и напечатайте оба результата в порядке отправки.

Скажите, чем прием отличается от чтения готового элемента из вектора, если очередь пока пуста.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить