Estou me confundindo com a diferença entre um futuro e uma promessa.
Obviamente, eles têm métodos e coisas diferentes, mas qual é o caso de uso real?
É isso?:
- quando estou gerenciando alguma tarefa assíncrona, uso future para obter o valor "no futuro"
- quando sou a tarefa assíncrona, uso promessa como o tipo de retorno para permitir que o usuário obtenha um futuro da minha promessa
Respostas:
Futuro e Promessa são os dois lados separados de uma operação assíncrona.
std::promise
é usado pelo "produtor / gravador" da operação assíncrona.std::future
é usado pelo "consumidor / leitor" da operação assíncrona.O motivo pelo qual é separado nessas duas "interfaces" separadas é ocultar a funcionalidade "gravar / definir" do "consumidor / leitor".
Uma maneira (incompleta) de implementar std :: async usando std :: promessa pode ser:
Usando o
std::packaged_task
que é um auxiliar (ou seja, basicamente faz o que estávamos fazendo acima) em torno destd::promise
você, você pode fazer o seguinte, que é mais completo e possivelmente mais rápido:Observe que isso é um pouco diferente de
std::async
onde os retornadosstd::future
, quando destruídos, realmente bloqueiam até que o encadeamento seja concluído.fonte
std::move(something)
é inútil e também prejudica o (N) RVO. Revertendo sua edição.