Я путаю себя с разницей между будущим и обещанием.
Очевидно, у них разные методы и прочее, но каков фактический вариант использования?
Это?:
- когда я управляю какой-то асинхронной задачей, я использую future, чтобы получить значение "в будущем"
- когда я выполняю асинхронную задачу, я использую обещание в качестве возвращаемого типа, чтобы позволить пользователю получить будущее из моего обещания
Ответы:
Future и Promise - это две разные стороны асинхронной операции.
std::promise
используется «производителем / писателем» асинхронной операции.std::future
используется «потребителем / читателем» асинхронной операции.Причина, по которой он разделен на эти два отдельных «интерфейса», состоит в том, чтобы скрыть функциональность «запись / установка» от «потребителя / читателя».
Один (неполный) способ реализовать std :: async с использованием std :: prom может быть:
Используя
std::packaged_task
который является помощником (то есть он в основном делает то, что мы делали выше),std::promise
вы можете сделать следующее, что будет более полным и, возможно, быстрее:Обратите внимание, что это немного отличается от того,
std::async
где возвращенныйstd::future
при уничтожении будет фактически блокироваться, пока поток не будет завершен.источник
std::move(something)
бесполезно, а также вредит (N) RVO. Отмена его редактирования.