/* Page prose (zh-Hans) */
"WhenAStreamCanFail" = "# 当一个流可能失败时：AsyncThrowingStream\n\n真实的传感器会断开连接。一个可能*失败*（而不只是结束）的流是一个 **`AsyncThrowingStream`**。它的工作方式和 `AsyncStream` 完全一样，只有两处不同：你可以用一个错误来结束它，而消费者在一个 `do-try-catch` 里用 `for try await` 循环。";
"WhenAStreamCanFail-2" = "**观察运行：**两个读数打印出来，然后 `finish(throwing:)` 用一个错误来结束这个流。那个错误被抛出循环之外，跳过 `Finished cleanly`，落进 `catch`，打印 `Stream failed: disconnected`。`for try await` 里的 `try` 就是那个给这个错误一个去处的东西；把它去掉，编译器会提醒你。\n\n* callout(试一试): 把 `finish(throwing: SensorFault.disconnected)` 换成一个普通的 `finish()`。循环现在会一路落到 `Finished cleanly`，而 `catch` 永远不会运行。结束和失败是两个不同的出口。\n\n当来源真的可能出错时，就用 `AsyncThrowingStream`。如果它只可能*结束*，普通的 `AsyncStream` 会让消费者更简单：不需要 `do-try-catch`。\n\n* callout(全局视角): `AsyncStream` 是对旧有的“又来一个值”模式的现代回答：反复触发的 delegate 方法、`NotificationCenter` 观察者、被调用不止一次的 completion handler。与其把那套逻辑散落在各个回调方法里，你把来源包装一次，让任何人都能用一个普通的 `for await` 循环去消费它。把*单个*回调桥接进 `await` 是下一章的活儿：continuation。\n\n[上一页](@previous)  |  第 6 / 7 页  |  [下一页: 小结](@next)";
