为什么std::task、core::task、tokio::task都存在?

Why do std::task, core::task, and tokio::task all exist?

Rust 似乎有 3 种不同类型的任务,

为什么会存在这三个任务?

这些都是模块,所以它们共存并具有相同的名称这一事实并不意味着什么。任何任意板条箱都可以创建一个 task 模块(或类型或特征或...)。这就是为什么大多数编程语言都以名称空间开头的原因——所以我们可以有名称冲突

  1. std::task is core::task,以不同的名称重新导出。这包含用于创建期货本身的构建块和驱动它们的执行者。极少数人需要使用这些类型。

  2. tokio::task 允许创建 Tokio 任务:“异步绿色线程”。这些是异步世界中线程的语义等价物。有关详细信息,请参阅 the Tokio website's section on spawning tasks

    async_std::task 是同一件事,但适用于不同的执行者。 async-std 任务与 Tokio 任务不同,不可互换。

  3. futures::task 是标准库模块和执行程序模块之间的混合体。这是因为它的历史——futures crate 是 futures 在被移入标准库之前的实现。现在它包含标准库类型的重新导出以及一些用于创建执行程序的其他工具以及 futures 库提供的执行程序上生成任务的特征。

另请参阅: