Me estoy confundiendo con la diferencia entre un futuro y una promesa.
Obviamente, tienen diferentes métodos y otras cosas, pero ¿cuál es el caso de uso real?
¿Lo es?:
- cuando estoy administrando alguna tarea asincrónica, uso el futuro para obtener el valor "en el futuro"
- cuando soy la tarea asíncrona, uso promesas como tipo de retorno para permitir que el usuario obtenga un futuro de mi promesa
Respuestas:
Futuro y promesa son los dos lados separados de una operación asincrónica.
std::promise
es utilizado por el "productor / escritor" de la operación asincrónica.std::future
es utilizado por el "consumidor / lector" de la operación asincrónica.La razón por la que se separa en estas dos "interfaces" separadas es para ocultar la funcionalidad "escribir / configurar" del "consumidor / lector".
Una forma (incompleta) de implementar std :: async usando std :: promise podría ser:
El uso de
std::packaged_task
which es un ayudante (es decir, básicamente hace lo que estábamos haciendo anteriormente) a su alrededorstd::promise
podría hacer lo siguiente, que es más completo y posiblemente más rápido:Tenga en cuenta que esto es ligeramente diferente de
std::async
donde el devueltostd::future
cuando se destruye en realidad bloquea hasta que el hilo haya terminado.fuente
std::move(something)
es inútil y también perjudica a (N) RVO. Revertiendo su edición.