Макрос ready!

Описание

Макрос ready! извлекает успешное значение из Poll<T> и обеспечивает распространение сигналов Pending путем досрочного возврата.

Синтаксис

#![allow(unused)]
fn main() {
ready!(expression)
}

Параметры

  • expression - выражение, возвращающее Poll<T>

Возвращаемое значение

  • Если выражение возвращает Poll::Ready(t), макрос возвращает t
  • Если выражение возвращает Poll::Pending, макрос выполняет return Poll::Pending

Пример использования

#![allow(unused)]
fn main() {
use std::task::{ready, Context, Poll};
use std::future::{self, Future};
use std::pin::Pin;

pub fn do_poll(cx: &mut Context<'_>) -> Poll<()> {
    let mut fut = future::ready(42);
    let fut = Pin::new(&mut fut);

    let num = ready!(fut.poll(cx));
    // ... использование num

    Poll::Ready(())
}
}

Раскрытие макроса

Вызов ready! раскрывается в следующий код:

#![allow(unused)]
fn main() {
let num = match fut.poll(cx) {
    Poll::Ready(t) => t,
    Poll::Pending => return Poll::Pending,
};
}

Когда использовать

Используйте макрос ready! когда вам нужно:

  • Извлечь значение из Poll::Ready
  • Автоматически обработать Poll::Pending с возвратом
  • Упростить код с цепочкой асинхронных операций

Примечания

  • Макрос определен в модуле std::task
  • Доступен начиная с Rust 1.64.0
  • Часто используется в реализации Future-трайтов