24 个稳定版本 (4 个主要版本)
4.7.1 | 2024年4月27日 |
---|---|
4.7.0 | 2024年1月4日 |
4.6.0 | 2023年12月17日 |
4.5.0 | 2023年10月18日 |
0.1.0 | 2019年5月7日 |
#9 在 异步 中
2,273,317 每月下载量
用于 5,023 个 crate (51 个直接使用)
100KB
1.5K SLoC
async-task
构建执行器的任务抽象。
要将 future 启动到执行器上,我们首先需要在堆上为其分配空间并保持一些与其关联的状态。该状态指示 future 是否准备好轮询、等待唤醒或完成。这种具有状态的 future 称为 任务。
所有执行器都有一个队列,用于持有计划中的任务
let (sender, receiver) = flume::unbounded();
可以使用 spawn()
、spawn_local()
或 spawn_unchecked()
创建任务,这些函数返回一个 Runnable
和一个 Task
// A future that will be spawned.
let future = async { 1 + 2 };
// A function that schedules the task when it gets woken up.
let schedule = move |runnable| sender.send(runnable).unwrap();
// Construct a task.
let (runnable, task) = async_task::spawn(future, schedule);
// Push the task into the queue by invoking its schedule function.
runnable.schedule();
Runnable
用于轮询任务的 future,而 Task
用于等待其输出。
最后,我们需要一个循环,从队列中取出计划中的任务并运行它们
for runnable in receiver {
runnable.run();
}
方法 run()
轮询任务的 future 一次。然后,Runnable
消失,只有在它的 Waker
唤醒任务并重新安排它再次运行时才会再次出现。
许可证
根据以下任一许可证授权:
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,均应按上述方式双许可,无需任何额外的条款或条件。
依赖关系
~215KB