1个不稳定版本
0.1.0 | 2023年2月7日 |
---|
#34 在 #minimal
2,754 每月下载量
在 15 个crate中使用 (通过 pollster)
9KB
92 行
Pollster
Pollster是一个极简的Rust异步执行器,它允许您在future完成之前阻塞线程。
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
就是为你准备的:它允许你在不启动像 tokio
或 async_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