Ожидание завершения потока в Rust
Ожидание по ручке блокирует основную линию, пока замыкание в фоне не завершится. Ответ приходит в виде результата: при успехе внутри лежит возвращенное значение.
Запустим линию с суммой и разберем ответ через сопоставление с образцом:
use std::thread;
fn main() {
let handle = thread::spawn(|| 2 + 3);
match handle.join() {
Ok(sum) => println!("{}", sum),
Err(_) => println!("failed"),
}
}
На экране число 5. Ветка с ошибкой
здесь не срабатывает, но ее оставляют,
чтобы не терять полный тип ответа.
Тот же прием с текстом, который собирает замыкание внутри фоновой линии:
use std::thread;
fn main() {
let handle = thread::spawn(|| String::from("ok"));
match handle.join() {
Ok(line) => println!("{}", line),
Err(_) => println!("failed"),
}
}
Дано число:
let num = 9;
Фоновая линия должна вернуть удвоенный литерал. Разберите ответ ручки и выведите результат.
Скажите, что получит программа в ветке
Ok, если замыкание ничего не
возвращает явно.
Дано число:
let num = 4;
Запустите две короткие линии: одна возвращает литерал, другая его увеличивает на единицу. Дождитесь каждую ручку по очереди и выведите оба числа.