Update ch17-05-traits-for-async.md

pull/911/head
KaiserY 1 day ago committed by GitHub
parent 9bf05de1df
commit 81f9bdd855
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -68,7 +68,7 @@ loop {
不过,如果 Rust 真的将代码精确地编译成那样,那么每一个 `await` 都会变成阻塞操作 -- 这恰恰与我们的目标相反相反Rust 确保循环可以将控制权交给一些可以暂停当前 future 转而去处理其它 future 并在之后再次检查当前 future 的内容。如你所见,这就是异步运行时,这种安排和协调的工作是其主要工作之一。
在本章前面的内容中,我们描述了等待 `rx.recv`。`recv` 调用返回一个 future并 await 轮询它的 future。我们注意到运行时会暂停 future ,直到它就绪并返回 `Some(message)` ,或是信道关闭时返回 `None` 为止。随着我们对 `Future` trait尤其是 `Future::poll` 的理解的深入,我们可以看出其是如何工作的。当返回 `Poll::Pending` 时,运行时知道 future 还没有准备就绪。反过来说,当 `poll` 返回 `Poll::Ready(Some(message))``Poll::Ready(None)` 时运行时知道 future **已经** 准备就绪,并将其推进。
在本章前面的内容中,我们描述了等待 `rx.recv`。`recv` 调用返回一个 future并 await 轮询它的 future。我们注意到运行时会暂停 future直到它就绪并返回 `Some(message)` ,或是信道关闭时返回 `None` 为止。随着我们对 `Future` trait尤其是 `Future::poll` 的理解的深入,我们可以看出其是如何工作的。当返回 `Poll::Pending` 时,运行时知道 future 还没有准备就绪。反过来说,当 `poll` 返回 `Poll::Ready(Some(message))``Poll::Ready(None)` 时运行时知道 future **已经** 准备就绪,并将其推进。
运行时如何工作的具体细节超出了本书的范畴。不过关键在于理解 future 的基本机制:运行时**轮询**其所负责的每一个 future在它们还没有完成时使其休眠。

Loading…
Cancel
Save