【发布时间】:2020-07-16 11:08:16
【问题描述】:
我想制作期货容器,每个未来都是任务的无效结果,因此我可以在容器上使用wait_for_any,每个任务都是我目前使用yield_context实现的协程,并且在这个协程中启动返回ec的函数和我使用 ec 分析结果的结果。然后调用另一个协程传递相同的 yield_context 。
我想知道如何制作这个设计。
如果我将使用 use_future ,我如何将错误代码传递给 ec 而不是抛出它,除非除了抛出它之外别无他法,在这种情况下,我将尝试并捕获异步启动函数。
所有这些任务都将在 asio io_service 上发布、生成……。
这是我的主要代码部分:
这是任务的产物
boost::asio::spawn(GetServiceReference(), boost::bind(&HTTPRequest::Execute, boost::placeholders::_1, m_HttpClient_request_name, Get_mHTTPClient_Responses_Map()));
这是使用 yield_context 的协程
void HTTPRequest::Execute(boost::asio::yield_context yield_r, std::string request_name, std::map<std::string, boost::shared_ptr<HTTPResponse>>& mHTTPClient_Responses_Map)
{
resolver_iterator iterator_connect = boost::asio::async_connect(mSock, iterator_resolve, yield_r[ec]);
}
在Execute里面我们用ec来分析
if (ec == boost::system::errc::errc_t::success){}
这里我们启动另一个协程传递相同的 yield_context
SendRequest(yield_r);
}
我想改变这一点,所以我有所有产生的 Execute 的期货容器,我不关心 Execute 的结果,因为我把它们放到成员类 Response 中。
但是我将来需要结果,以便我可以在容器上使用 wait_any 。
【问题讨论】:
标签: boost-asio future boost-thread