비동기 프로그래밍에서 futue는 강력한 도구입니다.

이전 포스팅에서 future와 then을 결합하여 연속 연결을 만드는 부분에 대하여 알아봤습니다.

future를 리턴하는 3개 이상의 비동기 연속 연결을 만드려면 unwrap을 이용해야 합니다.

이러한 방식의 장점은 연속된 다중 연결을 시리얼하게 처리할 수 있습니다.

예를 들어 비동기 A 작업이 완료된 후 비동기 B 작업을 처리하고 B 작업이 처리 된 후 C 작업이 처리되도록 어렵 지 않게 구현 할 수 있습니다.

예제

boost::promise<State> prom;
    prom.set_executor(executor->ExPointer());
    prom.set_value(going);
    boost::future<State> before = prom.get_future();
    
// GetLogin
before = before.then(executor->Ex(), [pSocket, req, ack, loginData](auto f)
{
    auto r = f.get();
    if (r != going)
        return boost::make_ready_future(r);

    return asyncFuncName(pSocket, req, ack, loginData);

}).unwrap();

// Secondary
before = before.then(executor->Ex(), [pSocket, req, ack, loginData](auto f)
{
    auto r = f.get();
    if (r != going)
        return boost::make_ready_future(r);

    return asyncFuncName_2(pSocket, req, ack, loginData);

}).unwrap();

// Third
before = before.then(executor->Ex(), [pSocket, req, ack, loginData](auto f)
{
    auto r = f.get();
    if (r != going)
        return boost::make_ready_future(r);

    return asyncFuncName_3(pSocket, req, ack, loginData);

});

return before;