Предел времени на ожидание в Rust
Если задача не успела, ожидание с пределом возвращает ошибку. Срок задают интервалом стандартной библиотеки из раздела даты и времени. Успех упакован в первую ветку результата, а превышение срока - во вторую.
Короткий сон внутри шага имитирует работу, которую мы ждем снаружи:
use std::time::Duration;
#[tokio::main]
async fn main() {
let fut = slow();
match tokio::time::timeout(Duration::from_millis(50), fut).await {
Ok(n) => println!("{}", n),
Err(_) => println!("late"),
}
}
async fn slow() -> i32 {
tokio::time::sleep(Duration::from_millis(10)).await;
7
}
На экране 7: десять миллисекунд
укладываются в предел пятидесяти. Разбор
через match показывает обе ветки
без принудительного извлечения значения.
Увеличим сон внутри шага, чтобы предел не выдержали:
use std::time::Duration;
#[tokio::main]
async fn main() {
let fut = slow();
match tokio::time::timeout(Duration::from_millis(50), fut).await {
Ok(n) => println!("{}", n),
Err(_) => println!("late"),
}
}
async fn slow() -> i32 {
tokio::time::sleep(Duration::from_millis(80)).await;
7
}
Дано число:
let num = 50;
Шаг спит двадцать миллисекунд и
возвращает этот литерал. Предел
ожидания - сто миллисекунд. Разберите
ответ и выведите число или текст
late.
Скажите, какой тип у выражения с пределом времени после точки ожидания: что лежит в ветке успеха и что во второй ветке.
Дано число:
let num = 3;
Сделайте шаг без сна, который сразу
отдает литерал. Ограничьте ожидание
десятью миллисекундами и выведите
результат через match.