<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>第17章 异步编程基础：Async、Await、Future 与 Stream on 编程那些事儿</title><link>https://before80.github.io/prgms/Rust/trpl/async-await/</link><description>Recent content in 第17章 异步编程基础：Async、Await、Future 与 Stream on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 11 Aug 2026 23:57:44 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Rust/trpl/async-await/index.xml" rel="self" type="application/rss+xml"/><item><title>17.1 Future 与 async 语法</title><link>https://before80.github.io/prgms/Rust/trpl/async-await/01-futures-and-syntax/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/async-await/01-futures-and-syntax/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="futures-and-syntax"&gt;Future 与 async 语法&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch17-01-futures-and-syntax.html"&gt;https://doc.rust-lang.org/stable/book/ch17-01-futures-and-syntax.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="future-与-async-语法"&gt;Future 与 async 语法&lt;/h2&gt;
&lt;p&gt;　　Rust 异步编程的关键要素是 &lt;em&gt;Future&lt;/em&gt; 以及 Rust 的 &lt;code&gt;async&lt;/code&gt; 与 &lt;code&gt;await&lt;/code&gt; 关键字。&lt;/p&gt;
&lt;p&gt;　　&lt;em&gt;Future&lt;/em&gt; 是一个现在可能尚未就绪、但将来某时刻会就绪的值。（同一概念出现在许多语言中，有时也叫 &lt;em&gt;task&lt;/em&gt; 或 &lt;em&gt;promise&lt;/em&gt;。）Rust 提供 &lt;code&gt;Future&lt;/code&gt; trait 作为构建块，使不同异步操作可用不同数据结构实现，却共享统一接口。在 Rust 中，Future 就是实现了 &lt;code&gt;Future&lt;/code&gt; trait 的类型。每个 Future 都保存自己关于已取得进展以及何谓“就绪”的信息。&lt;/p&gt;</description></item><item><title>17.2 用 async 实现并发</title><link>https://before80.github.io/prgms/Rust/trpl/async-await/02-concurrency-with-async/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/async-await/02-concurrency-with-async/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="async"&gt;用 async 实现并发&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch17-02-concurrency-with-async.html"&gt;https://doc.rust-lang.org/stable/book/ch17-02-concurrency-with-async.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="用-async-应用并发"&gt;用 Async 应用并发&lt;/h2&gt;
&lt;p&gt;　　本节我们将把 async 应用到第 16 章用线程解决过的一些同类并发挑战上。因为那里已经谈过许多关键思想，本节将聚焦线程与 Future 之间的差异。&lt;/p&gt;</description></item><item><title>17.3 处理任意数量的 Future</title><link>https://before80.github.io/prgms/Rust/trpl/async-await/03-more-futures/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/async-await/03-more-futures/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="working-with-any-number-of-futures"&gt;处理任意数量的 Future&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch17-03-more-futures.html"&gt;https://doc.rust-lang.org/stable/book/ch17-03-more-futures.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="向运行时让出控制权"&gt;向运行时让出控制权&lt;/h3&gt;
&lt;p&gt;　　回想&lt;a href="../01-futures-and-syntax/#our-first-async-program"&gt;「我们的第一个异步程序」&lt;/a&gt;一节：在每个 await 点，若正在等待的 Future 尚未就绪，Rust 会给运行时一个机会暂停该任务并切换到另一个。反过来也成立：Rust &lt;em&gt;只&lt;/em&gt;在 await 点暂停异步块并把控制权交还给运行时。await 点之间的一切都是同步的。&lt;/p&gt;</description></item><item><title>17.4 Stream：序列中的 Future</title><link>https://before80.github.io/prgms/Rust/trpl/async-await/04-streams/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/async-await/04-streams/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="stream-future"&gt;Stream：序列中的 Future&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch17-04-streams.html"&gt;https://doc.rust-lang.org/stable/book/ch17-04-streams.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="composing-streams"&gt;Stream：序列中的 Future&lt;/h2&gt;
&lt;p&gt;　　回想本章前面&lt;a href="../02-concurrency-with-async/#message-passing"&gt;「消息传递」&lt;/a&gt;一节中异步通道接收端的用法。异步的 &lt;code&gt;recv&lt;/code&gt; 方法会随时间产生一系列项。这正是一种更一般模式——&lt;em&gt;流&lt;/em&gt;（stream）——的实例。许多概念天然适合用流表示：队列中陆续可用的项、完整数据过大而无法一次装入内存时从文件系统增量拉取的数据块，或随时间从网络到达的数据。因为流也是 Future，我们可以把它们与其他任何 Future 一起使用，并以有趣的方式组合：例如批量处理事件以避免过多网络调用、为长时间运行的操作序列设置超时，或节流界面事件以避免无谓工作。&lt;/p&gt;</description></item><item><title>17.5 深入了解异步相关 Trait</title><link>https://before80.github.io/prgms/Rust/trpl/async-await/05-traits-for-async/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/async-await/05-traits-for-async/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="trait"&gt;深入了解异步相关 Trait&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch17-05-traits-for-async.html"&gt;https://doc.rust-lang.org/stable/book/ch17-05-traits-for-async.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="更仔细地看看异步相关-trait"&gt;更仔细地看看异步相关 Trait&lt;/h2&gt;
&lt;p&gt;　　整章中我们以各种方式使用了 &lt;code&gt;Future&lt;/code&gt;、&lt;code&gt;Stream&lt;/code&gt; 与 &lt;code&gt;StreamExt&lt;/code&gt; trait。不过到目前为止，我们避免深入它们如何工作或如何拼在一起的细节——这在日常 Rust 工作中多数时候没问题。但有时你会遇到需要再多了解这些 trait 一些细节的情形，连同 &lt;code&gt;Pin&lt;/code&gt; 类型与 &lt;code&gt;Unpin&lt;/code&gt; trait。本节我们会挖到刚好够用的深度以应对那些场景，而把&lt;em&gt;真正&lt;/em&gt;深入的内容留给其他文档。&lt;/p&gt;</description></item><item><title>17.6 Future、任务与线程</title><link>https://before80.github.io/prgms/Rust/trpl/async-await/06-futures-tasks-threads/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/async-await/06-futures-tasks-threads/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="future"&gt;Future、任务与线程&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch17-06-futures-tasks-threads.html"&gt;https://doc.rust-lang.org/stable/book/ch17-06-futures-tasks-threads.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="综合起来future任务与线程"&gt;综合起来：Future、任务与线程&lt;/h2&gt;
&lt;p&gt;　　正如我们在&lt;a href="../../concurrency/"&gt;第 16 章&lt;/a&gt;所见，线程是实现并发的一种途径。本章又看到了另一种：用 async 配合 Future 与 Stream。若你在想何时该选哪一种，答案是：视情况而定！而且在许多情况下，选择并不是线程&lt;em&gt;或&lt;/em&gt; async，而是线程&lt;em&gt;与&lt;/em&gt; async。&lt;/p&gt;</description></item></channel></rss>