Rust 程序设计语言 简体中文版 1.85.0
是按照半秒的间隔到达的。它们在程序启动后两秒(2000 毫秒)后立刻一起到达。其次,程 序永远也不会退出!相反它会永远等待新消息。你会需要使用 ctrl-c 来关闭它。 让我们开始理解为何消息在全部延迟后立刻一起到达,而不是逐个在延迟后到达。在一个给定 的异步代码块,await 关键字在代码中出现的顺序也就是程序执行时其发生的顺序。 示例 17-10 中只有一个异步代码块,所以所有的代码线性地执行。这里仍然没有并发。所有 调用及其相关的 await point 是依次进行的。只有在此之后 while let 循环才开始执行 recv 调用上的 await point。 为了得到我们需要的行为,在接收每条消息之间引入休眠延迟,我们需要将 tx 和 rx 操作放 置于它们各自的异步代码块中。这样运行时就可以使用 trpl::join 来分别执行它们,就像在 计数示例中一样。我们再一次 await trpl::join 调用的结果,而不是它们各自的 17-13 中,我们克隆了 tx,在第一个异步代码块外面创建 tx1。我们像 第一个 tx 一样将 tx1 移动进代码块。接下来,将原始的 tx 移动进一个 新的 异步代码块,其 中会用一个稍微更长的延迟发送更多的消息。我们碰巧将新代码块放在接收消息的异步代码块 之后,不过也可以放在之前。关键在于 future 被 await 的顺序,而不是它们创建的顺序。 两个发送消息的异步代码块需要是 async0 码力 | 562 页 | 3.23 MB | 8 天前3
共 1 条
- 1