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

Исполнитель и точка входа в Rust

Точка ожидания работает только внутри асинхронного контекста. Снаружи исполнителя ей некуда передать управление, поэтому обычная синхронная главная функция такой код не соберет.

Пометка точки входа подключает готовый исполнитель: она превращает главную функцию в асинхронную и запускает цикл, который крутит задачи до конца программы.

Атрибут пишут прямо над главной функцией вместе с асинхронной главной:

#[tokio::main] async fn main() { let n = step().await; println!("{}", n); } async fn step() -> i32 { 4 }

Без #[tokio::main] компилятор увидит точку ожидания в функции, которая не помечена как асинхронная, и остановит сборку. С атрибутом главная функция получает и исполнитель, и право ждать внутри себя.

Тот же каркас с коротким сном внутри шага, чтобы исполнитель успел переключиться:

#[tokio::main] async fn main() { let n = step().await; println!("{}", n); } async fn step() -> i32 { tokio::time::sleep(std::time::Duration::from_millis(10)).await; 6 }

Дано число:

let num = 8;

Пометьте главную функцию атрибутом исполнителя, верните этот литерал из асинхронного шага и выведите его.

Скажите, зачем точке ожидания нужен исполнитель снаружи асинхронной функции.

Дано число:

let num = 1;

Уберите атрибут с главной функции, оставив точку ожидания внутри. Опишите, какую ошибку сборки увидите.

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