Как Co_await asio :: ожидается с кобальтомC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как Co_await asio :: ожидается с кобальтом

Сообщение Anonymous »

Как бы я ждал asio :: wawitable за пределами asio ? Asio :: waitableables может быть ожидается только Asio :: awaitables , здесь Boost :: Cobalt вступает в игру, но я не знаю, как его подключить. На базовом уровне я также не уверен, должен ли весь код Asio в клиенте переписать с помощью Cobalt или, если я могу обернуть клиенту кобальтом слоем сверху.
Вот то, что я пытаюсь сделать. У меня есть httpsclient, написанный с помощью Boost :: Beast и Boost :: asio .
Интерфейс должен использовать общую супрутину из кобальта, поэтому остальная часть программы может Co_await , но не нуждается в Asio .
Co_await не нуждается в asio .
cobalt::promise HttpsClient::GET(const std::string &url){
co_return co_await asio_impl.GET(url);
}
< /code>
Asio Impl работает: < /p>
asio::awaitable HttpsClientImpl::GET(std::string_view url, beast::http::fields headers = {})
{
auto data = "";
auto [error, http_response] = co_await redirector_.do_session(http::verb::get, url, headers, data, ssl_ctx_);
if (!error) {
FinalResult fr = http_response->body();
co_return fr;
}
else {
co_return FinalResult();
}
}
< /code>
Вот как я представлял себе, чтобы позвонить в пользовательский интерфейс. На самом деле здесь также проблема с использованием co_await в обработчике сигнала Lambda: Co_main :: 2 :: :: operator (): должен вернуть значение
QObject::connect(button, &QPushButton::clicked, &w, [&](){
std::string url = "https://microsoftedge.github.io/Demos/j ... /64KB.json";
label->setText("Getting response...");
FinalResult result = co_await client.GET(url);
label->setText("Response ready!");
text->setPlainText(QString::fromStdString(result));
});


Подробнее здесь: https://stackoverflow.com/questions/796 ... ith-cobalt
Ответить

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

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

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

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

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