Простая функция:
awaitable<std::size_t> write(const std::vector<uint8_t>& data)
{
auto token = co_await this_coro::token();
return co_await async_write(serialport_, buffer(data), token);
}
Можно ожидать, используя co_await write(my_data)
.
. Это работает, когда я использую любую асинхронную функцию Boost ASIO.
Как быпродолжать использовать этот шаблон, если асинхронная функция была некоторым обратным вызовом из какой-то не связанной библиотеки?
Код потенциально мог бы выглядеть примерно так:
awaitable<bar> foo()
{
auto token = co_await this_coro::token();
return co_await third_party_callback;
}
И использование было бы что-то вроде auto result = co_await foo()
.
У меня возникают трудности с выяснением, каков самый простой / чистый способ для этого.
Дополнительный вопрос: какова связь между API сопрограмм Boost ASIO (например, токеном) и Boostбиблиотека сопрограмм и сопрограммы TS?