Ich verwechsle mich mit dem Unterschied zwischen einer Zukunft und einem Versprechen.
Natürlich haben sie unterschiedliche Methoden und Dinge, aber was ist der eigentliche Anwendungsfall?
Ist es?:
- Wenn ich eine asynchrone Aufgabe verwalte, verwende ich future, um den Wert "in future" zu erhalten.
- Wenn ich die asynchrone Aufgabe bin, verwende ich Versprechen als Rückgabetyp, damit der Benutzer eine Zukunft aus meinem Versprechen ziehen kann
Antworten:
Future und Promise sind die beiden getrennten Seiten einer asynchronen Operation.
std::promise
wird vom "Produzenten / Schreiber" der asynchronen Operation verwendet.std::future
wird vom "Consumer / Reader" der asynchronen Operation verwendet.Der Grund, warum es in diese beiden separaten "Schnittstellen" unterteilt ist, besteht darin , die "Schreiben / Festlegen" -Funktionalität vor dem "Verbraucher / Leser" zu verbergen .
Eine (unvollständige) Möglichkeit, std :: async mit std :: versprechen zu implementieren, könnte sein:
Wenn Sie
std::packaged_task
einen Helfer verwenden (dh im Grunde das tun, was wir oben getan haben), könnenstd::promise
Sie Folgendes tun, was vollständiger und möglicherweise schneller ist:Beachten Sie, dass dies etwas anders ist, als
std::async
wenn der zurückgegebenestd::future
Wille, wenn er zerstört wird, tatsächlich blockiert, bis der Thread fertig ist.quelle
std::move(something)
nutzlos ist und auch (N) RVO schmerzt. Zurücksetzen seiner Bearbeitung.