[在很多地方,我发现类似:
std::move(A).thenValue(B)
thenValue()是否阻止了将来的“ A”。我通读了Folly文档,但听不懂。https://github.com/facebook/folly/blob/master/folly/docs/Futures.md
不,它没有阻止。从概念上讲,您可以想到这样的签名(尽管这不是实际的签名):
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
- 将来调用
thenValue
。
thenValue
的回调函数。当(1)获得成功结果时,将以该结果调用(2)。当(2)返回时,(3)产生(2)的返回值。
Future(3)是同步构造的,但回调(2)是异步调用的。