typo: correct some typo in ch17-02

pull/892/head
skymkmk 1 week ago
parent 294fbbbced
commit 9084845e0f
No known key found for this signature in database
GPG Key ID: 6F4CA5A97C68BD71

@ -5,7 +5,7 @@
在这一部分,我们将使用异步来应对一些与第十六章中通过线程解决的相同的并发问题。因为之前我们已经讨论了很多关键理念了,这一部分我们会专注于线程与 future 的区别。 在这一部分,我们将使用异步来应对一些与第十六章中通过线程解决的相同的并发问题。因为之前我们已经讨论了很多关键理念了,这一部分我们会专注于线程与 future 的区别。
在很多情况下,使用异步处理并发的 API 与使用线程的非常相似。在其它的一些情况,它们则非常不同。即便线程与异步的 API *看起来* 很类似,通常它们有着不同的行为,同时它们几乎总是有着不同的性能特点。 在很多情况下,使用异步处理并发的 API 与使用线程的非常相似。在其它的一些情况,它们则非常不同。即便线程与异步的 API *看起来* 很类似,通常它们有着不同的行为,同时它们几乎总是有着不同的性能特点。
### 计数 ### 计数
@ -175,7 +175,7 @@ hi number 9 from the first task!
在示例 16-10 中,我们使用了 `for` 循环来处理从异步信道接收的所有消息。然而Rust 目前还没有在 *异步* 序列上编写 `for` 循环的方法。取而代之的是,我们需要一个我们还没有见过的新循环类型,即 `while let` 条件循环。`while let` 循环是我们在第六章中见过的 `if let` 结构的循环版本。只要其指定的模式持续匹配循环就会一直执行。 在示例 16-10 中,我们使用了 `for` 循环来处理从异步信道接收的所有消息。然而Rust 目前还没有在 *异步* 序列上编写 `for` 循环的方法。取而代之的是,我们需要一个我们还没有见过的新循环类型,即 `while let` 条件循环。`while let` 循环是我们在第六章中见过的 `if let` 结构的循环版本。只要其指定的模式持续匹配循环就会一直执行。
`rx.recv` 调用产生一个 `Future`,我们会 await 它。运行时会暂停 `Future` 直到它就绪。一旦消息到达future 会解析为 `Some(message)`,每次消息到达时都会如此。当信道关闭时,不管是否有 *任何* 消息到达future 都会解析为 `None` 来表明没有更多的值了,我们也就应该停止轮询,也就是停止等待。 `rx.recv` 调用产生一个 `Future`,我们会 await 它。运行时会暂停 `Future` 直到它就绪。一旦消息到达future 会解析为 `Some(message)`,每次消息到达时都会如此。当信道关闭时,不管是否有 *任何* 消息到达future 都会解析为 `None` 来表明没有更多的值了,我们也就应该停止轮询,也就是停止等待。
`while let` 循环将上述逻辑整合在一起。如果 `rx.recv().await` 调用的结果是 `Some(message)`,我们会得到消息并可以在循环体中使用它,就像使用 `if let` 一样。如果结果是 `None`,则循环停止。每次循环执行完毕,它会再次触发 await point如此运行时会再次暂停直到另一条消息到达。 `while let` 循环将上述逻辑整合在一起。如果 `rx.recv().await` 调用的结果是 `Some(message)`,我们会得到消息并可以在循环体中使用它,就像使用 `if let` 一样。如果结果是 `None`,则循环停止。每次循环执行完毕,它会再次触发 await point如此运行时会再次暂停直到另一条消息到达。

Loading…
Cancel
Save