|
|
|
@ -5,7 +5,7 @@
|
|
|
|
|
|
|
|
|
|
到本章的目前为止,我们大部分时间都专注于单个的 future 上。一个重要的例外就是我们用过的异步信道。回忆一下在本章之前的 [“消息传递”][17-02-messages] 中我们如何使用异步信道接收端的。异步 `recv` 方法随着时间的推移产生一个序列的项。这是一个更通用的模式的实例,通常被称为 *流*(*stream*)。
|
|
|
|
|
|
|
|
|
|
我们之前在第十三章的 [Iterator trait 和 `next` 方法][iterator-trait] 部分已经见过项的序列,不过迭代器和异步信道接收端有两个区别。第一个区别是时间维度:迭代器是同步的,而信道接收端是异步的。第二个区别是 API。当直接处理 `Iterator` 时,我们会调用其同步 `next` 方法。对于这个特定的 `trpl::Receiver` 流,我们调用一个异步的 `recv` 方法。除此之外,这两种 API 在使用上感觉十分相似,这种相似性并非巧合。流类似于一种异步形式的迭代器。然而, `trpl::Receiver` 专门等待接收消息,而通用的流 API 适用范围要广泛得多:它以与 `Iterator` 相同的方式一样提供下一个元素,但采用异步的方式。
|
|
|
|
|
我们之前在第十三章的 [Iterator trait 和 `next` 方法][iterator-trait] 部分已经见过项的序列,不过迭代器和异步信道接收端有两个区别。第一个区别是时间维度:迭代器是同步的,而信道接收端是异步的。第二个区别是 API。当直接处理 `Iterator` 时,我们会调用其同步 `next` 方法。对于这个特定的 `trpl::Receiver` 流,我们调用一个异步的 `recv` 方法。除此之外,这两种 API 在使用上感觉十分相似,这种相似性并非巧合。流类似于一种异步形式的迭代器。然而, `trpl::Receiver` 专门等待接收消息,而通用的流 API 适用范围要广泛得多:它以与 `Iterator` 相同的方式提供下一个元素,但采用异步的方式实现。
|
|
|
|
|
|
|
|
|
|
Rust 中迭代器和流的相似性意味着我们实际上可以从任何迭代器上创建流。与迭代器类似,我们可以通过调用流的 `next` 方法并 await 其输出来使用它,如示例 17-30 所示。
|
|
|
|
|
|
|
|
|
|