Вариант Pending класса Poll
Вариант Pending класса Poll используется в асинхронном программировании
для обозначения состояния, когда операция ещё не готова вернуть результат.
Он не содержит полезной нагрузки и сигнализирует о том, что выполнение
задачи должно быть приостановлено до момента, когда она сможет продвинуться дальше.
Вариант Pending обычно возвращается из метода poll трейта Future.
Синтаксис
Poll::Pending
Пример
Давайте создадим простую реализацию трейта Future,
которая при первом опросе возвращает Poll::Pending,
а при втором - Poll::Ready:
use std::future::Future;
use std::pin::Pin;
use std::task::{Context, Poll};
struct MyFuture
{
ready: bool,
}
impl Future for MyFuture
{
type Output = i32;
fn poll(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Self::Output>
{
if self.ready
{
Poll::Ready(42)
}
else
{
self.ready = true;
Poll::Pending
}
}
}
fn main()
{
let mut fut = MyFuture { ready: false };
let mut cx = Context::from_waker(futures::task::noop_waker_ref());
let res1 = Pin::new(&mut fut).poll(&mut cx);
println!("{:?}", res1);
let res2 = Pin::new(&mut fut).poll(&mut cx);
println!("{:?}", res2);
}
Результат выполнения кода:
Pending
Ready(42)
Пример
Давайте проверим, как вариант Pending можно сравнить с помощью matches!:
use std::task::Poll;
fn main()
{
let res: Poll<i32> = Poll::Pending;
if matches!(res, Poll::Pending)
{
println!("pending");
}
else
{
println!("ready");
}
}
Результат выполнения кода:
"pending"