boost.future: esses dois pedaços de código são equivalentes?

Estou preocupado com problemas ocultos de bloqueio que possam surgir desses dois pedaços de código. Para mim, o primeiro está funcionando, o segundo não está. Sinto-me mais confiante quanto a algo como o código não útil não seria bloqueado, mas não está funcionando corretamente.

Minha pergunta é: esses dois pedaços de código são equivalentes ou o fato de eu ter um.get() na primeira continuação do código de trabalho pode fazer com que meu código seja bloqueado nesse ponto?

Código de trabalho.

auto finished = user2.ReceiveChatMessages().then([&]
(boost::future<std::vector<ServerReply>> && receivedMessages) 
    {
        number_received_messages_in_continuation = receivedMessages.get().size();

        //Will this .get make my code block in any case?
        return user2.ReceiveChatMessages().get();
    })
   .then([&](boost::future<std::vector<ServerReply>> && receivedMessages) {
       number_received_messages_in_continuation += receivedMessages.get().size();
});

Código não ativo.

auto finished = user2.ReceiveChatMessages().then([&]
(boost::future<std::vector<ServerReply>> && receivedMessages) 
    {
        number_received_messages_in_continuation = receivedMessages.get().size();

        //No .get() here
        return user2.ReceiveChatMessages();
    }).unwrap() //We need to unwrap
   .then([&](boost::future<std::vector<ServerReply>> && receivedMessages) {
       number_received_messages_in_continuation += receivedMessages.get().size();
});

questionAnswers(2)

yourAnswerToTheQuestion