一文读懂Rust的async
不同的编程语言表现异步编程的方式可能不一样,Rust跟JavaScript的async/await类似:使用的关键字啊,编程模型啊都差不多啦! 也有些不一样的地方,毕竟Rust是重新设计的语言嘛,比如:在JavaScript中使用Promise表示需要延迟异步执行的计算,在Rust中使用的是Future.在JavaScript中不需要选择指定运行异步代码的运行时,在Rust中需要. Rust还更麻烦了?还得选择指定运行时?
这是因为Rust是可以面向硬件、嵌入式设备的操作系统级别的编程语言就像C++,并且零抽象成本.这就需要Rust需要有选择地把功能包含进标准库里.简单来说,为了满足不同的编程场景Rust标准库就没有包含指定异步代码运行时,我们可以根据具体的场景选择不同的运行时。
是不是感觉还有点晕乎?没关系,下面我们会介绍怎么在Rust中编写异步(async)代码.知道了怎么编写异步代码,也就知道async是什么了.如果你是第一次使用Rust编写异步代码或者第一次使用异步代码库正在迷茫从何入手,那恭喜你,这篇文档特别适合你.开始之前我们先快速的介绍下异步编程的基本要素.
基本要素
编写异步的应用,至少需要俩个crate:
你可能不想在项目中引入过多依赖,但这些依赖就像chrono和log是比较基础的依赖.唯一的不同是这些依赖是面向异步编程的.
我们接下来会使用Tokio做为运行时,刚开始你最好也先了解熟悉使用一种运行时,然后再尝试使用其它运行时。
因为这些运行时之间有很多相通的地方,熟悉了一个再去熟悉其它的就简单了。就像我们学习编程语言一样,学好学深一门编程语言,再去学习其它的语言就快了。不要一开始就几门语言一起学,这样很可能实际开发时这也不行那也不行换来换去还是不能开发出东西.
我们可以像下面这样引入依赖:
[dependencies]
futures = { version = "0.3.*" }
tokio = {version = "0.2.*", features = ["full"] }
在main.rs中敲入以下代码:
use futures::prelude::*;
use tokio::prelude::*;
fn main() {
todo!();
}
可以执行下cargo check如果没什么报错信息,依赖配置就完成了.接下来我们介绍怎么使用运行时。
运行时
像我们先前说

本文详细介绍如何在Rust中实现异步编程,包括选择运行时、生成Future、处理阻塞和CPU密集型任务,以及如何创建Web请求的示例。
最低0.47元/天 解锁文章
921





