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();
});