gpt4 book ai didi

rust - Future::then 的语义是什么?

转载 作者:行者123 更新时间:2023-11-29 08:13:50 25 4
gpt4 key购买 nike

我对组合子 then 的语义感到困惑。

直觉上,a.then(|r| f(r)) 是一个 future ,当 ar 结束时,解析为f(r)。换句话说,在 a 之后组成 f。例如。 a 从 I/O 读取一个数字,f 将它加倍。这是有道理的,这就是我的心智模型。

深入挖掘,其实不止于此。传递给 then 的闭包会产生一个 IntoFuture,这意味着将 f 应用于 a 的结果会返回另一个 future 。上面的理解是不正确的,因为 f(r) 仍然没有完全解决。

根据我在文档和源代码中阅读的内容,它似乎是以下内容:a.then(|r| f(r)) 本质上一直在轮询直到将来 a 已解决,然后继续轮询 f(r) (这也是一个 future )直到它解决。最后整个事情都解决了。

这是正确的思考方式吗?为什么我们需要第二层 future ?

最佳答案

then不等待 future 完成。正如文档所说,它是懒惰的:

The closure is only run after successful completion of the self future.

它基本上链接了 2 个 future 。假设你有:

  • 一个 future future_a“计算”a a
  • 一个方法 foo 接受一个 a 并返回一个 future_b
future_a.then(foo)

将是合并这 2 个 future 以返回 future_b

的 future

关于rust - Future::then 的语义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53002597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com