ฉันต้องการสร้างคอนเทนเนอร์แห่งฟิวเจอร์ส แต่ละอนาคตถือเป็นผลลัพธ์ของงานเป็นโมฆะ เพื่อที่ฉันจะได้ใช้ wait_for_any บนคอนเทนเนอร์ แต่ละงานคือโครูทีนซึ่งฉันกำลังใช้งานโดยใช้ผลผลิต_คอนเท็กซ์ และภายในโครูทีนนี้มีฟังก์ชันเริ่มต้นซึ่งส่งคืน ec และผลลัพธ์โดยที่ ฉันใช้ ec เพื่อวิเคราะห์ผลลัพธ์ จากนั้นมีอีกชื่อหนึ่งเรียกว่า coroutine ผ่าน Yield_context เดียวกัน
ฉันต้องการทราบวิธีการออกแบบนี้
และถ้าฉันจะใช้ use_future ฉันจะส่งรหัสข้อผิดพลาดเพื่อให้ ec ไม่โยนได้อย่างไร เว้นแต่ว่าจะไม่มีทางอื่นนอกจากโยนมันทิ้งไป ในกรณีนี้ ฉันจะลองจับฟังก์ชันการเริ่มต้น async
งานเหล่านี้ทั้งหมดจะถูกโพสต์ วางไข่ ... บน asio io_service
นี่คือส่วนหลักของฉัน of code:
นี่คือการวางไข่ของงาน
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){}
และที่นี่เราเริ่มต้น coroutine อื่นที่ส่งผ่าน Yield_context เดียวกัน
SendRequest(yield_r);
}
ฉันต้องการเปลี่ยนสิ่งนี้ ดังนั้นฉันจึงมีคอนเทนเนอร์ฟิวเจอร์สสำหรับ Execute ที่เกิดทั้งหมด ฉันไม่สนใจผลลัพธ์ของ Execute เพราะฉันใส่มันไว้ใน Response ของคลาสสมาชิก
แต่ฉันต้องการผลลัพธ์ในอนาคตเพื่อที่ฉันจะได้ใช้ wait_any บน คอนเทนเนอร์ .