Merge pull request #866 from jaynnn/patch-1

Update ch17-02-concurrency-with-async.md
This commit is contained in:
KaiserY 2025-05-23 17:50:46 +08:00 committed by GitHub
commit 719cb4f190
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -173,7 +173,7 @@ hi number 9 from the first task!
除了发送消息之外,我们还需要接收它们。在这个例子中我们可以手动接收,就是调用四次 `rx.recv().await`,因为我们知道进来了多少条消息。然而,在现实世界中,我们通常会等待 *未知* 数量的消息。这时我们需要一直等待直到可以确认没有更多消息了为止。
在示例 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` 来表明没有更多的值了,我们也就应该停止轮询,也就是停止等待。