Spec-Zone.ru › Tokio

Структура Sleep

pub struct Sleep { /* private fields */ }
Доступно только при включённой функции crate time.

Future, возвращаемый функциями sleep и sleep_until.

Этот тип не реализует трейт Unpin, поэтому при использовании с select! или вызове poll его сначала необходимо закрепить (pin). При использовании с .await этого делать не нужно.

Примеры

Подождать 100 мс и вывести «Прошло 100 мс».

use tokio::time::{sleep, Duration};

sleep(Duration::from_millis(100)).await;
println!("100 ms have elapsed");

Использование с select!. Если один и тот же Sleep выбирается несколько раз, необходимо закрепить (pin) Sleep с помощью tokio::pin!.

use tokio::time::{self, Duration, Instant};

let sleep = time::sleep(Duration::from_millis(10));
tokio::pin!(sleep);

loop {
    tokio::select! {
        () = &mut sleep => {
            println!("timer elapsed");
            sleep.as_mut().reset(Instant::now() + Duration::from_millis(50));
        },
    }
}

Использование в структуре с боксированием. Закрепив Sleep с помощью Box, структура HasSleep реализует Unpin, хотя Sleep этого не реализует.

use std::future::Future;
use std::pin::Pin;
use std::task::{Context, Poll};
use tokio::time::Sleep;

struct HasSleep {
    sleep: Pin<Box<Sleep>>,
}

impl Future for HasSleep {
    type Output = ();

    fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<()> {
        self.sleep.as_mut().poll(cx)
    }
}

Использование в структуре с проекцией pin. Этот способ позволяет избежать Box, однако в результате структура HasSleep не будет Unpin.

use std::future::Future;
use std::pin::Pin;
use std::task::{Context, Poll};
use tokio::time::Sleep;
use pin_project_lite::pin_project;

pin_project! {
    struct HasSleep {
        #[pin]
        sleep: Sleep,
    }
}

impl Future for HasSleep {
    type Output = ();

    fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<()> {
        self.project().sleep.poll(cx)
    }
}

Реализации

impl Sleep

pub fn deadline(&self) -> Instant

Возвращает момент времени, в который future завершится.

pub fn is_elapsed(&self) -> bool

Возвращает true, если время ожидания Sleep истекло.

Экземпляр Sleep считается завершившимся, когда истекло заданное время ожидания.

pub fn reset(self: Pin<&mut Self>, deadline: Instant)

Сбрасывает экземпляр Sleep, задавая новый срок завершения.

Вызов этой функции позволяет изменить момент времени, в который future Sleep завершится, без создания нового связанного состояния.

Эту функцию можно вызывать как до завершения future, так и после него.

Для вызова этого метода обычно вместе с ним используют Pin::as_mut, который позволяет вызвать метод, не потребляя сам Sleep.

Пример
use tokio::time::{Duration, Instant};

let sleep = tokio::time::sleep(Duration::from_millis(10));
tokio::pin!(sleep);

sleep.as_mut().reset(Instant::now() + Duration::from_millis(20));

См. также примеры в начале документа.

Реализации трейтов

impl Debug for Sleep

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Форматирует значение с помощью заданного форматтера. Подробнее

impl Future for Sleep

type Output = ()

Тип значения, возвращаемого при завершении.

fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>

Пытается привести future к конечному значению; если значение ещё недоступно, регистрирует текущую задачу для пробуждения. Подробнее

Автоматические реализации трейтов

impl !Freeze for Sleep

impl !RefUnwindSafe for Sleep

impl !UnsafeUnpin for Sleep

impl !UnwindSafe for Sleep

impl Send for Sleep

impl Sync for Sleep

Общие реализации

impl<T> Any for T
where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

Получает TypeId для self. Подробнее

impl<T> Borrow<T> for T
where T: ?Sized,

fn borrow(&self) -> &T

Неизменяемо заимствует данные из владеющего значения. Подробнее

impl<T> BorrowMut<T> for T
where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

Изменяемо заимствует данные из владеющего значения. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью указанного Span, возвращая оболочку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью текущего Span, возвращая оболочку Instrumented. Подробнее

impl<T, U> Into<U> for T
where U: From<T>,

fn into(self) -> U

Вызывает U::from(self).

То есть результат этого преобразования определяется реализацией From<T> for U.

impl<F> IntoFuture for F
where F: Future,

type Output = <F as Future>::Output

Результат, который будет получен при завершении будущего значения.

type IntoFuture = F

В какой тип будущего значения мы преобразуем это значение?

fn into_future(self) -> <F as IntoFuture>::IntoFuture

Создаёт будущее значение из значения. Подробнее

impl<T, U> TryFrom<U> for T
where U: Into<T>,

type Error = Infallible

Тип, возвращаемый в случае ошибки преобразования.

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Выполняет преобразование.

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error

Тип, возвращаемый в случае ошибки преобразования.

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Выполняет преобразование.

impl<T> WithSubscriber for T

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Присоединяет предоставленный Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Присоединяет текущий по умолчанию Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

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

Spec-Zone.ru

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