这些都是模块,它们共存并具有相同的名称并不意味着什么。任何任意的板条箱都可以创建一个任务
模块(或类型或特征等)。这就是为什么大多数编程语言首先都有命名空间的原因 - 这样我们就可以避免名称冲突。
std::task
是core::task
的重新导出,只是名称不同。它包含了创建future以及驱动它们的执行器的构建块。只有极少数人需要使用这些类型。
tokio::task
允许创建Tokio的“异步绿色线程”,这是异步世界中线程的语义等价物。有关更多详细信息,请参见Tokio网站上的生成任务部分。
async_std::task
也是同样的东西,只不过是为另一个执行器而设计的。async-std任务与Tokio任务不同,不能互换使用。
futures::task
在标准库模块和执行器模块之间有点混杂。这是由于它的历史原因——futures crate是将futures实现移入标准库之前的实现。现在它包含了标准库类型的重新导出,以及一些用于创建执行器的工具和用于在由futures库提供的执行器上生成任务的特性。
另请参阅: