Вариант Ready
Вариант Ready перечисления Poll сообщает,
что асинхронная задача завершена. Он используется в
реализациях трейта Future при вызове метода
poll. Параметром вариант принимает значение типа
T, которое является результатом завершённой
операции.
Синтаксис
Poll::Ready(value)
Пример
Давайте создадим простую реализацию Future,
которая всегда завершается сразу и возвращает число:
use std::future::Future;
use std::task::{Context, Poll};
use std::pin::Pin;
struct ReadyFuture;
impl Future for ReadyFuture
{
type Output = i32;
fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<i32>
{
Poll::Ready(42)
}
}
fn main()
{
let mut future = ReadyFuture;
let mut cx = Context::from_waker(std::task::Waker::noop());
let res = Pin::new(&mut future).poll(&mut cx);
match res
{
Poll::Ready(v) => println!("Ready: {}", v),
Poll::Pending => println!("Pending"),
}
}
Результат выполнения кода:
"Ready: 42"
Пример
Давайте напишем функцию, которая возвращает Poll
в зависимости от входного условия:
use std::task::Poll;
fn check_ready(value: bool) -> Poll<i32>
{
if value
{
Poll::Ready(100)
}
else
{
Poll::Pending
}
}
fn main()
{
let res = check_ready(true);
match res
{
Poll::Ready(v) => println!("Done: {}", v),
Poll::Pending => println!("Not yet"),
}
}
Результат выполнения кода:
"Done: 100"