1 个不稳定版本

0.1.0 2021年7月26日

异步 中排名第 1878

Download history 2852/week @ 2024-03-14 3873/week @ 2024-03-21 1872/week @ 2024-03-28 1872/week @ 2024-04-04 2209/week @ 2024-04-11 2200/week @ 2024-04-18 1704/week @ 2024-04-25 1533/week @ 2024-05-02 222/week @ 2024-05-09 708/week @ 2024-05-16 1304/week @ 2024-05-23 1685/week @ 2024-05-30 2538/week @ 2024-06-06 3946/week @ 2024-06-13 1521/week @ 2024-06-20 897/week @ 2024-06-27

每月下载量 9,120
async-quic 中使用

MIT/Apache 许可

7KB

当唤醒时无操作的唤醒器。适用于“立即执行”类型场景,其中未来不太可能被轮询多次,或者用于“自旋”执行器。

示例

一个非常低效的 block_on 函数实现,不断轮询未来。

use core::{future::Future, hint::spin_loop, task::{Context, Poll}};
use futures_lite::future::poll_fn;
use noop_waker::noop_waker;

fn block_on<R>(f: impl Future<Output = R>) -> R {
    // pin the future to the stack
    futures_lite::pin!(f);

    // create the context
    let waker = noop_waker();
    let mut ctx = Context::from_waker(&waker);

    // poll future in a loop
    loop {
        match f.as_mut().poll(&mut ctx) {
            Poll::Ready(o) => return o,
            Poll::Pending => spin_loop(),
        }
    }
}

// this future returns pending 5 times before returning ready

let mut counter = 0;
let my_future = poll_fn(|ctx| {
    if counter < 5 {
        counter += 1;
        ctx.waker().wake_by_ref();
        Poll::Pending
    } else {
        Poll::Ready(7)
    }
});

assert_eq!(block_on(my_future), 7);

无运行时依赖