Gerenciando a comunicação assíncrona: como examinar a resposta recebida em outro encadeamento

Eu tenho um thread de expedidor e um de ouvinte. Quando envio um comando, desejo aguardar uma resposta antes de enviar o comando de acompanhamento. Além disso, preciso examinar a resposta antes de prosseguir com o segundo comando, o mínimo dos quais é confirmar que a resposta foi recebida e que tudo está bem. Meu pseudo-código está abaixo:

void MainWindow::downloadData()
{
    dispatcher->getInfo(); // sends command

    // QString response = receiver->response() // idealy I would like to check response but since its async, i can't really do that!

    dipatcher->askData(); // the 2nd command and so forth

}

Existe alguma maneira elegante de resolver esse problema? A única maneira de pensar é se eu usar o mesmo thread e todas as chamadas estiverem bloqueadas, mas isso não é necessariamente uma boa solução.

No Qt, eu poderia usar sinais e slots para conectá-los em cascata; assim, quando o primeiro sinal é acionado, inicia toda a sequência de operação (cada slot que emite um novo sinal), mas também parece bastante sujo.

questionAnswers(1)

yourAnswerToTheQuestion