Spec-Zone.ru › Tokio

Функция timeout_at

pub fn timeout_at<F>(deadline: Instant, future: F) -> Timeout<F::IntoFuture> ⓘ
where F: IntoFuture,
Доступно только при включённой функции крейта time.

Требует, чтобы Future завершился до указанного момента времени.

Если фьючерс завершается до наступления указанного момента, возвращается полученное значение. В противном случае возвращается ошибка.

Эта функция возвращает фьючерс, тип результата которого — Result<T,Elapsed>, где T — тип результата переданного фьючерса.

Если переданный фьючерс завершается немедленно, то фьючерс, возвращаемый этой функцией, гарантированно завершится немедленно с вариантом Ok независимо от переданного срока.

Отмена

Чтобы отменить тайм-аут, достаточно удалить фьючерс. Дополнительная очистка или другие действия не требуются.

Исходный фьючерс можно получить, вызвав Timeout::into_inner. При этом Timeout потребляется.

Примеры

Создайте Timeout, срок действия которого истекает через 10 миллисекунд.

use tokio::time::{Instant, timeout_at};
use tokio::sync::oneshot;

use std::time::Duration;

let (tx, rx) = oneshot::channel();

// Wrap the future with a `Timeout` set to expire 10 milliseconds into the
// future.
if let Err(_) = timeout_at(Instant::now() + Duration::from_millis(10), rx).await {
    println!("did not receive value within 10 ms");
}

Паника

Эта функция вызывает панику, если текущий таймер не установлен.

Это может произойти, если в билдер не включены Builder::enable_time или Builder::enable_all.

Паника также может возникнуть при создании таймера вне среды выполнения Tokio. Именно поэтому rt.block_on(sleep(...)) вызовет панику, поскольку функция выполняется вне среды выполнения. В то же время rt.block_on(async {sleep(...).await}) не вызывает панику. Это происходит потому, что обёртывание функции в async делает её ленивой, поэтому она успешно выполняется внутри среды выполнения и не вызывает панику.

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/time/fn.timeout_at.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API