Spec-Zone.ru › Tokio

Функция timeout

pub fn timeout<F>(duration: Duration, future: F) -> Timeout<F::IntoFuture> ⓘ
where F: IntoFuture,
Доступно только при включенной возможности crate time.

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

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

Обратите внимание: фьючерс опрашивается до проверки тайм-аута. Поэтому, если во время выполнения фьючерс не возвращает управление, он может завершиться и превысить тайм-аут без возврата ошибки.

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

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

Отмена

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

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

Примеры

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

use tokio::time::timeout;
use tokio::sync::oneshot;

use std::time::Duration;

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

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

Панические завершения

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

Это может произойти, если в builder не включены 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.html

Spec-Zone.ru

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