Фоновая задача исполнителя в Rust
Задачу отдают исполнителю и ждут ее ручку. Пока фоновый блок выполняется, главная функция может делать другие шаги, а завершение узнают по ручке через точку ожидания.
Запустим отдельную асинхронную работу и дождемся числа из ручки:
#[tokio::main]
async fn main() {
let handle = tokio::spawn(async move {
3
});
match handle.await {
Ok(n) => println!("{}", n),
Err(_) => println!("failed"),
}
}
На экране 3. Ручка живет в главной
функции и хранит связь с фоновой задачей,
пока к ней не обратятся через точку
ожидания.
Замыкание с move забирает нужные
данные во владение, если они понадобятся
внутри блока:
#[tokio::main]
async fn main() {
let base = 10;
let handle = tokio::spawn(async move {
base + 2
});
match handle.await {
Ok(n) => println!("{}", n),
Err(_) => println!("failed"),
}
}
Дано число:
let num = 5;
Отдайте исполнителю блок, который возвращает этот литерал. Сохраните ручку, разберите ответ через сопоставление и выведите число.
Скажите, зачем внутри фонового блока
иногда пишут move перед
замыканием.
Дано число:
let num = 2;
Выведите start, запустите
фоновую работу с этим литералом,
дождитесь ручку и выведите end.