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)并返回afuture\u b
。future\u b
也已解决,还是按原样返回?@SvenMarnach现在也许我看到了。这只是map(foo)
和then(foo)
之间的区别:map
返回foo(a)
,而then
解析foo(a)
。
future_a.then(foo)