1个不稳定版本

0.1.0 2023年2月7日

#34#minimal

Download history 983/week @ 2024-03-13 305/week @ 2024-03-20 576/week @ 2024-03-27 322/week @ 2024-04-03 241/week @ 2024-04-10 448/week @ 2024-04-17 306/week @ 2024-04-24 212/week @ 2024-05-01 206/week @ 2024-05-08 625/week @ 2024-05-15 501/week @ 2024-05-22 1047/week @ 2024-05-29 657/week @ 2024-06-05 357/week @ 2024-06-12 1166/week @ 2024-06-19 397/week @ 2024-06-26

2,754 每月下载量
15 个crate中使用 (通过 pollster)

Apache-2.0/MIT

9KB
92

Pollster

Pollster是一个极简的Rust异步执行器,它允许您在future完成之前阻塞线程。

Cargo Documentation License actions-badge

use pollster::FutureExt as _;

let my_fut = async {};

let result = my_fut.block_on();

仅此而已。它只做这些。没有更多,也没有更少。无需引入50个crate来评估一个future。

这有什么用呢?

由于 async 函数现在是稳定的,我们越来越多地看到Rust生态系统中的各种库都公开了 async API。这对于想构建高度并发的Web应用的人来说是极好的!

然而,我们中许多人并不是在构建高度并发的Web应用,而是遇到了一个我们难以从同步代码中调用的 async 函数。如果你处于这种位置,那么 pollster 就是为你准备的:它允许你在不启动像 tokioasync_std 这样的重量级运行时的情况下,原地评估future。

极简主义

Pollster是以 UNIX精神 为指导思想构建的:只做一件事,并且做好。它没有依赖,编译速度快,仅由约100行经过良好审计的代码组成。

行为

Pollster将同步阻塞线程,直到future完成。它不会自旋:相反,它将线程置于等待状态,直到future被轮询完成。

兼容性

遗憾的是,pollster 并不适用于 所有 future,因为一些需要特定的运行时或反应堆。有关 pollster 可能何时以及在哪里使用的更多信息,请参阅 此处。但是,如果你最初需要引入所需依赖来创建这样的future,那么你很可能已经在依赖树中有一个为轮询你的future而设计的 block_on 版本,所以请使用那个版本。

当使用 载件包功能时,可以使用属性宏来标记 async fn main()

#[pollster::main]
async fn main() {
    let my_fut = async {};

    my_fut.await;
}

另外,如果您已将软件包重命名为不同于 pollster 的名称,则必须指定它

#[pollster::main(crate = "renamed-pollster")]
async fn main() {
    let my_fut = async {};

    my_fut.await;
}

您还可以使用 #[pollster::test] 用于测试。

依赖关系

~1.5MB
~36K SLoC