Rust Future::then的语义是什么?

Rust Future::then的语义是什么?,rust,Rust,我被组合符的语义搞糊涂了,然后 直观地说,a.then(| r | f(r))是一个未来,当a以r结束时,解析为f(r)。换句话说,在a之后编写f。例如,a从I/O读取一个数字,并将其加倍。这是有道理的,这是我的思维模式 深入挖掘,事实上还有更多。传递给的闭包然后产生一个到未来,这意味着对a的结果应用f将返回另一个未来。上述理解是不正确的,因为f(r)仍未完全解决 从我在文档和源代码中读到的内容来看,似乎是这样的:a。然后(|r | f(r))基本上保持轮询直到未来a解决,然后保持轮询f(r)(

我被组合符
的语义搞糊涂了,然后

直观地说,
a.then(| r | f(r))
是一个未来,当
a
r
结束时,解析为
f(r)
。换句话说,在
a
之后编写
f
。例如,
a
从I/O读取一个数字,并将其加倍。这是有道理的,这是我的思维模式

深入挖掘,事实上还有更多。传递给
的闭包然后
产生一个
到未来
,这意味着对
a
的结果应用
f
将返回另一个未来。上述理解是不正确的,因为
f(r)
仍未完全解决

从我在文档和源代码中读到的内容来看,似乎是这样的:
a。然后(|r | f(r))
基本上保持轮询直到未来
a
解决,然后保持轮询
f(r)
(这也是未来)直到解决。最后整个事情都解决了

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

不会等待未来的结束。它是懒惰的,正如医生所说:

只有在成功完成
self
future后,才会运行关闭

它基本上连锁了2个期货。假设你有:

  • 一个“计算”a
    a
    的未来
  • 一种方法
    foo
    ,它接受
    a
    并返回
    future\u b

将是一个合并这两个期货以返回一个
期货的未来\u b

你所说的:第二层期货是什么意思?我认为这就是
map()
所做的,而
then()
连锁两个期货。@SvenMarnach哦,是的,你是对的。这是一个错误。您想回答,还是我应该编辑我的答案?我现在没有时间回答,请继续。:)@斯文马纳奇:我知道它很懒。使用您的示例,假设
t=future\u a.then(foo)
。我的问题是:当调用
t.wait()
时,
future\u a
首先解析为“a”,然后计算foo(a)并返回a
future\u b
future\u b
也已解决,还是按原样返回?@SvenMarnach现在也许我看到了。这只是
map(foo)
then(foo)
之间的区别:
map
返回
foo(a)
,而
then
解析
foo(a)
future_a.then(foo)