boost::future .then() 继续返回 boost::future
boost::future .then() continuations returning boost::future
我正在阅读关于改进std::future
和std::promise
的新C++提案 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3857.pdf 它说
常见的情况是,然后函数对象的主体将 本身是一个基于未来的操作,这导致了 then() 回归未来>。在这种情况下,它几乎总是 如果你真正关心的是内心的未来,那么() 在返回之前执行隐式解包()(见下文)。
因此在下面的代码中
auto promise = std::promise<int>{};
auto another_future = promise.get_future().then([](auto future) {
return std::async([]() { return 1; });
});
another_future
的类型是std::future<int>
而不是std::future<std::future<int>>
我试图使用boost::future
来实现同样的事情,但似乎提升延续并没有隐含地解开未来。 我可以做些什么来从提振期货中实现相同的行为? 似乎也没有可用于结果功能的unwrap()
函数。
我是否不得不通过构造函数手动解开未来? 另外,在尝试出现以下错误时,我该怎么办?
inline explicit BOOST_THREAD_FUTURE(
BOOST_THREAD_RV_REF(
BOOST_THREAD_FUTURE<BOOST_THREAD_FUTURE<R> >) other); // EXTENSION
解包是 Boost 线程的条件扩展:
#define BOOST_THREAD_PROVIDES_FUTURE
#define BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
#include <boost/thread.hpp>
int main() {
auto promise = boost::promise<int>{};
boost::future<int> another_future =
promise.get_future().then([](auto) {
return boost::async([]() { return 1; });
}).unwrap();
}
相关文章:
- 如何使用 boost::future 重新抛出 std::exception_ptr 存储的原始异常?
- boost::future::那它是如何实现的?
- BOOST :: Future延期延续的持续僵局
- boost::future .then() 继续返回 boost::future
- 将 Boost 链与 std::future 结合使用
- 程序在使用异步的 Boost.Process 调用 std::future.get() 后挂起
- 成员std::future防止boost::shared_ptr超出范围
- 异常不会使用boost :: future/boost :: Promise跨线程正确传播
- 使用 boost::future .then() 时出现编译错误
- boost的类型::future<> from boost::async()
- (如何)当std::future准备就绪时,我可以获得boost::asio::io_service的回调吗
- boost::packaged_task生成的future是否抛出错误的异常
- boost::future-是否保证wait_callback只被调用一次
- boost::asio+std::future-关闭套接字后发生访问冲突
- 在主线程中执行,boost::future::then
- 如何将异常报告给boost::future
- 为什么 boost::future:<T>:then() 会生成一个新线程?
- 在continuation和boost::when_all中使用boost::future
- c++ 17 resume /await:它也可以与boost::future一起使用吗?
- Boost::future和continuations -值集,但future仍然阻塞