.thenValue() 阻塞了吗?
Is .thenValue() blocking?
在很多地方我发现类似的东西:
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)
代表的未来成功,传递的回调 (B
) 将被执行,传入 A
未来产生的值。回调的 return 值成为 thenValue()
编辑的未来 return 的结果。
如果您是一个视觉人(像我一样),那么标记部分签名可能会有所帮助:
template <typename T>
template <typename TResult>
Future<TResult> Future<T>::thenValue(std::function<TResult(T&&)> callback) { ... }
^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^
3 1 2
- 您正在调用
thenValue
的未来。
- 你传给
thenValue
的回调函数。
- 未来 return 由
thenValue
编辑。
当 (1) 获得成功结果时,将使用该结果调用 (2)。当 (2) returns 时,(3) 产生 (2) 的 return 值。
future (3) 是同步构造的,但回调 (2) 是异步调用的。
在很多地方我发现类似的东西:
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)
代表的未来成功,传递的回调 (B
) 将被执行,传入 A
未来产生的值。回调的 return 值成为 thenValue()
编辑的未来 return 的结果。
如果您是一个视觉人(像我一样),那么标记部分签名可能会有所帮助:
template <typename T>
template <typename TResult>
Future<TResult> Future<T>::thenValue(std::function<TResult(T&&)> callback) { ... }
^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^
3 1 2
- 您正在调用
thenValue
的未来。 - 你传给
thenValue
的回调函数。 - 未来 return 由
thenValue
编辑。
当 (1) 获得成功结果时,将使用该结果调用 (2)。当 (2) returns 时,(3) 产生 (2) 的 return 值。
future (3) 是同步构造的,但回调 (2) 是异步调用的。