/* Page prose (zh-Hans) */
"ProducingWithAsyncStream" = "# 用 AsyncStream 生产一个序列\n\n消费只是故事的一半。大多数时候，*你*才是那个手里有数值涓涓流入的人（来自一个计时器、一个定位回调、一个蓝牙传感器），而你想把它们交给一个 `for await` 循环。**`AsyncStream` 就是那个把逐个到来的数值来源变成异步序列的工具。**\n\n你用一个接收 **continuation** 的闭包来创建它，continuation 是一个你调用来把数值推进流里的对象：\n\n* `continuation.yield(value)` 向正在循环的一方发出一个元素。\n* `continuation.finish()` 结束这个流，于是消费者的循环停止。\n\n我们来接通屋顶气象站。它大约每 0.3 秒发出一个读数，共五次，然后结束。";
"ProducingWithAsyncStream-2" = "**观察运行：**两行 `print` 交错出现，一次一对，大约每 0.3 秒一次：`sensor emits reading 1`，然后 `received ...°C`，然后一次停顿，然后是读数 2，以此类推。第五个读数之后，`finish()` 结束这个流，循环退出，`Stream finished` 打印出来。你正实实在在地看着数值随时间到来，这是任何普通数组都无法向你展示的。\n\n* callout(试一试): 把 `1...5` 改成 `1...8`，把延迟改成 `.milliseconds(150)`。这个流现在会发出更多、更快的读数。`finish()` 那一行仍然会干净地结束它。\n\n有几件事值得点名：\n\n* 闭包运行它自己的 `Task` 来做等待。`yield` 可以从任何地方、任意多次地被调用：从一个计时器、一个 delegate 方法、一个 completion handler。每次调用都向循环递送一个元素。\n* 如果还没有人 await 下一个值，`AsyncStream` 会把它**缓冲**起来，这样你就不会丢失一个在消费者忙碌时到来的读数。\n* 你 yield 的那些值应该是 **`Sendable`** 的：它们从生产的任务跳到消费的任务。`Double` 和 `Int` 本来就是，所以 Swift 6 的 data race 检查在这里保持沉默。\n\n[上一页](@previous)  |  第 3 / 7 页  |  [下一页: 用 onTermination 做清理](@next)";
