Je me confond avec la différence entre un avenir et une promesse.
De toute évidence, ils ont des méthodes et des trucs différents, mais quel est le cas d'utilisation réel?
Est-ce?:
- lorsque je gère une tâche asynchrone, j'utilise future pour obtenir la valeur "in future"
- lorsque je suis la tâche asynchrone, j'utilise la promesse comme type de retour pour permettre à l'utilisateur d'avoir un avenir grâce à ma promesse
Réponses:
Future et Promise sont les deux côtés distincts d'une opération asynchrone.
std::promise
est utilisé par le "producteur / rédacteur" de l'opération asynchrone.std::future
est utilisé par le "consommateur / lecteur" de l'opération asynchrone.La raison pour laquelle il est séparé en ces deux "interfaces" séparées est de masquer la fonctionnalité "écriture / définition" du "consommateur / lecteur".
Une façon (incomplète) d'implémenter std :: async en utilisant std :: promise pourrait être:
En utilisant
std::packaged_task
qui est une aide (c'est-à-dire qu'il fait essentiellement ce que nous faisions ci-dessus) autour destd::promise
vous, vous pouvez faire ce qui est plus complet et peut-être plus rapide:Notez que ceci est légèrement différent de l'
std::async
endroit où lestd::future
sera retourné une fois détruit se bloquer jusqu'à ce que le thread soit terminé.la source
std::move(something)
est inutile et que cela fait également mal au (N) RVO. Revenir à sa modification.