РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1096 of 1245 menu

Метод poll класса Future

Метод poll опрашивает Future и проверяет, завершено ли его вычисление. Он возвращает значение типа Poll: либо Poll::Ready с готовым результатом, либо Poll::Pending, если результат ещё не готов. Параметром метод принимает контекст Context, который содержит Waker для уведомления исполнителя о готовности Future.

Синтаксис

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

Пример

Давайте создадим простой Future, который сразу возвращает готовое значение 42:

use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; struct ReadyFuture; impl Future for ReadyFuture { type Output = i32; fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Self::Output> { Poll::Ready(42) } } fn main() { let mut future = ReadyFuture; let mut cx = Context::from_waker(futures::task::noop_waker_ref()); let pinned = Pin::new(&mut future); let res = pinned.poll(&mut cx); println!("{:?}", res); }

Результат выполнения кода:

Ready(42)

Пример

Давайте создадим Future, который при первом опросе возвращает Poll::Pending, а при повторном - Poll::Ready:

use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; struct PendingFuture { ready: bool, } impl Future for PendingFuture { type Output = &'static str; fn poll(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Self::Output> { if self.ready { Poll::Ready("done") } else { self.ready = true; Poll::Pending } } } fn main() { let mut future = PendingFuture { ready: false }; let mut cx = Context::from_waker(futures::task::noop_waker_ref()); let res1 = Pin::new(&mut future).poll(&mut cx); println!("{:?}", res1); let res2 = Pin::new(&mut future).poll(&mut cx); println!("{:?}", res2); }

Результат выполнения кода:

Pending Ready("done")

Смотрите также

  • класс Future,
    который представляет асинхронное вычисление
  • перечисление Poll,
    которое хранит результат опроса Future
  • вариант Ready,
    который означает, что Future завершён
  • вариант Pending,
    который означает, что Future ещё не готов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить