。thenValue()是否阻塞?

问题描述 投票:-1回答:1

[在很多地方,我发现类似:

std::move(A).thenValue(B)

thenValue()是否阻止了将来的“ A”。我通读了Folly文档,但听不懂。https://github.com/facebook/folly/blob/master/folly/docs/Futures.md

c++ future folly
1个回答
1
投票

不,它没有阻止。从概念上讲,您可以想到这样的签名(尽管这不是实际的签名):

template <typename T>
template <typename TResult>
Future<TResult> Future<T>::thenValue(std::function<TResult(T&&)> callback) { ... }

[基本思想是,如果由std::move(A)表示的Future成功,则将执行传递的回调(B),并传入A future产生的值。回调的返回值成为thenValue()返回的future的结果。

如果您是一个像我这样的视觉人物,那么标记签名的部分可能会有所帮助:

template <typename T>
template <typename TResult>
Future<TResult> Future<T>::thenValue(std::function<TResult(T&&)> callback) { ... }
^^^^^^^^^^^^^^^ ^^^^^^^^^                                        ^^^^^^^^
       3            1                                                2
  1. 将来调用thenValue
  • 您传递给thenValue的回调函数。
  • [C0返回的未来。
  • 当(1)获得成功结果时,将以该结果调用(2)。当(2)返回时,(3)产生(2)的返回值。

    Future(3)是同步构造的,但回调(2)是异步调用的。

    © www.soinside.com 2019 - 2024. All rights reserved.