Как делиться зависимостями в составных операциях AsioC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как делиться зависимостями в составных операциях Asio

Сообщение Anonymous »

Этот вопрос поразил меня проблемой, упомянутой в комментариях:

@sehe use_promise кажется очень интересным. Я поискал
документацию по этому вопросу и нашел несколько ваших сообщений, например этот. Но
как я могу имитировать boost::wait_for_all с помощью use_promise? Также
похоже, что существует проблема, когда две задачи ждут завершения одной единственной
задачи. – YzEdwin Комментировал вчера
Вы можете сделать группу асинхронных операций (

Код: Выделить всё

make_parallel_group
) и
затем инициируйте его с помощью use_promise. Между прочим,

Код: Выделить всё

experimental::promise
особенно универсален, поскольку обещание

Код: Выделить всё

operator()
также делает эту операцию асинхронной, поэтому ее можно
группировать/откладывать поочередно – sehe Комментировал вчера
@sehe Наконец-то у меня use_promise работает с make_parallel_group.
Раньше я использовал asio::deferred. Полагаю, use_promise больше
похожа на нетерпеливую оценку? Но все же самая большая проблема — это форк. Например,
у меня есть две независимые задачи A и B, завершение которых зависит от задачи C
. Все три события должны выполняться только один раз. Это можно
легко сделать с помощью boost::shared_future, поскольку я мог бы просто передать

Код: Выделить всё

shared_future
задачи C на then() задач A и B. Но если я
использую co_spawn и обе задачи co_await задачи C, задача C будет
выполнена дважды. – YzEdwin Комментарий 20 часов назад

Точка общей зависимости действительна: asio::experimental::promise доступна только для перемещения и не может быть ожидаема дважды. В этом отношении это больше похоже на завернутую асинхронную операцию (согласно проверке концепции is_async_operation).
  • Можем ли мы обернуть обещание в копируемый/общий тип обещания?
  • Как бы мы это сделали?
  • А вообще требуется экспериментальное::promise?


Подробнее здесь: https://stackoverflow.com/questions/797 ... operations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»