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

Отправка значения в канал в Rust

Пара из отправителя и приемника появляется вместе: оба конца ссылаются на одну очередь. Отправитель владеет правом класть значения, приемник позже заберет их. Пока приемник жив, очередь принимает новые элементы.

Подключим модуль очереди и создадим пару, затем передадим целое число:

use std::sync::mpsc; fn main() { let (tx, rx) = mpsc::channel(); match tx.send(7) { Ok(()) => println!("sent"), Err(_) => println!("fail"), } let _ = rx; }

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

Если приемник исчезнет раньше, чем очередь опустеет, повторная отправка вернет ошибку. Разберем ответ через сопоставление:

use std::sync::mpsc; fn main() { let (tx, _rx) = mpsc::channel(); drop(_rx); match tx.send(3) { Ok(()) => println!("ok"), Err(_) => println!("no receiver"), } }

Дано число:

let num = 11;

Создайте пару концов очереди, положите в нее это число и выведите sent только при успешной отправке. Приемник оставьте в переменной до конца main.

Дано число:

let num = 5;

Создайте очередь, сразу уничтожьте приемник и попробуйте передать число. Напечатайте closed, если пришла ошибка отправки.

Скажите, зачем в первом примере приемник остается в переменной, хотя из очереди еще ничего не читают.

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