diff --git a/src/advance-practice/getting-startted.md b/src/advance-practice/getting-startted.md index 22a74520..5008b907 100644 --- a/src/advance-practice/getting-startted.md +++ b/src/advance-practice/getting-startted.md @@ -141,7 +141,7 @@ pub async fn connect(addr: T) -> Result { 在上例中,`redis` 的连接函数 `connect` 实现如上,它看上去很像是一个同步函数,但是 `async fn` 出卖了它。 `async fn` 异步函数并不会直接返回值,而是返回一个 `Future`,顾名思义,该 `Future` 会在未来某个时间点被执行,然后最终获取到真实的返回值 `Result`。 -> async/await 的原理就算大家不理解,也不妨碍使用 `tokio` 写出能用的服务,但是如果想要更深入的用好,强烈建议认真读下本书的 [`async/await` 异步编程章节](https://course.rs/async-rust/async/intro.html),你会对 Rust 的异步编程有一个全新且深刻的认识。 +> async/await 的原理就算大家不理解,也不妨碍使用 `tokio` 写出能用的服务,但是如果想要更深入的用好,强烈建议认真读下本书的 [`async/await` 异步编程章节](https://course.rs/advance/async/intro.html),你会对 Rust 的异步编程有一个全新且深刻的认识。 由于 `async` 会返回一个 `Future`,因此我们还需要配合使用 `.await` 来让该 `Future` 运行起来,最终获得返回值: diff --git a/src/advance-practice/spawning.md b/src/advance-practice/spawning.md index 70efd828..d63172bf 100644 --- a/src/advance-practice/spawning.md +++ b/src/advance-practice/spawning.md @@ -2,7 +2,7 @@ 同志们,抓稳了,我们即将换挡提速,通向 `mini-redis` 服务端的高速之路已经开启。 -不过在开始之前,先来做点收尾工作:上一章节中,我们实现了一个简易的 `mini-redis` 客户端并支持了 `SET`/`GET` 操作, 现在将该[代码](https://course.rs/async-rust/tokio/getting-startted.html#分析未到代码先行)移动到 `examples` 文件夹下,因为我们这个章节要实现的是服务器,后面可以通过运行 `example` 的方式,用之前客户端示例对我们的服务器端进行测试: +不过在开始之前,先来做点收尾工作:上一章节中,我们实现了一个简易的 `mini-redis` 客户端并支持了 `SET`/`GET` 操作, 现在将该[代码](https://course.rs/advance-practice/getting-startted.html#分析未到代码先行)移动到 `examples` 文件夹下,因为我们这个章节要实现的是服务器,后面可以通过运行 `example` 的方式,用之前客户端示例对我们的服务器端进行测试: ```shell $ mkdir -p examples diff --git a/src/advance/async/async-await.md b/src/advance/async/async-await.md index 4f039ddb..17145727 100644 --- a/src/advance/async/async-await.md +++ b/src/advance/async/async-await.md @@ -22,7 +22,7 @@ fn bar() -> impl Future { `async` 是懒惰的,直到被执行器 `poll` 或者 `.await` 后才会开始运行,其中后者是最常用的运行 `Future` 的方法。 当 `.await` 被调用时,它会尝试运行 `Future` 直到完成,但是若该 `Future` 进入阻塞,那就会让出当前线程的控制权。当 `Future` 后面准备再一次被运行时(例如从 `socket` 中读取到了数据),执行器会得到通知,并再次运行该 `Future` ,如此循环,直到完成。 -以上过程只是一个简述,详细内容在[底层探秘](https://course.rs/async-rust/async/future-excuting.html)中已经被深入讲解过,因此这里不再赘述。 +以上过程只是一个简述,详细内容在[底层探秘](https://course.rs/advance/async/future-excuting.html)中已经被深入讲解过,因此这里不再赘述。 ## `async` 的生命周期 diff --git a/src/advance/async/web-server.md b/src/advance/async/web-server.md index c51784c0..d71fc336 100644 --- a/src/advance/async/web-server.md +++ b/src/advance/async/web-server.md @@ -300,7 +300,7 @@ impl Write for MockTcpStream { } ``` -最后,我们的 mock 需要实现 `Unpin` 特征,表示它可以在内存中安全的移动,具体内容在[前面章节](https://course.rs/async-rust/async/pin-unpin.html)有讲。 +最后,我们的 mock 需要实现 `Unpin` 特征,表示它可以在内存中安全的移动,具体内容在[前面章节](https://course.rs/advance/async/pin-unpin.html)有讲。 ```rust use std::marker::Unpin;