Метод send
Метод send класса Sender отправляет значение
в канал, созданный функцией channel. Параметром
метод принимает значение, которое нужно передать принимающей
стороне. Метод возвращает Result: вариант Ok
при успешной отправке и вариант Err, если принимающая
сторона уже была удалена. После успешной отправки метод
потребляет значение, поэтому его нельзя использовать повторно.
Синтаксис
sender.send(value)
Пример
Давайте отправим число 12345 через канал и получим его
на принимающей стороне:
use std::sync::mpsc::channel;
fn main()
{
let (tx, rx) = channel();
tx.send(12345).unwrap();
let res = rx.recv().unwrap();
println!("{}", res);
}
Результат выполнения кода:
12345
Пример
Давайте отправим строку "abcde" через канал
и получим её на принимающей стороне:
use std::sync::mpsc::channel;
fn main()
{
let (tx, rx) = channel();
tx.send("abcde").unwrap();
let res = rx.recv().unwrap();
println!("{}", res);
}
Результат выполнения кода:
"abcde"
Пример
Давайте отправим несколько значений через канал в отдельном потоке и получим их на принимающей стороне:
use std::sync::mpsc::channel;
use std::thread;
fn main()
{
let (tx, rx) = channel();
thread::spawn(move || {
tx.send(1).unwrap();
tx.send(2).unwrap();
tx.send(3).unwrap();
});
for res in rx.iter()
{
println!("{}", res);
}
}
Результат выполнения кода:
1
2
3
Пример
Давайте обработаем ошибку отправки, когда принимающая сторона уже удалена:
use std::sync::mpsc::channel;
fn main()
{
let (tx, rx) = channel();
drop(rx);
let res = tx.send(12345);
println!("{:?}", res.is_err());
}
Результат выполнения кода:
true