Re[2]: Асинхронщина
От: Videoman Россия https://hts.tv/
Дата: 28.12.25 00:05
Оценка:
Здравствуйте, antropolog, Вы писали:

A>в азио есть несколько политик по работе с асинхронностью, задаются так называемыми completion token, которые определяют механизм возврата результата асинхронной функции. В частности есть токен use_future, для него асинх. операция возвратит фьючер


Супер, отлично! Но, стоит чуть усложнить логику и такой подход не работает:

void func1 () 
{
std::string line1;
std::future<std::size_t> future_read_1 = boost::asio::async_read_until(socket, boost::asio::dynamic_buffer(line1), '\n', boost::asio::use_future);

// какая-то логика тут

const size_t bytes_transferred = future1_read.get();

// какая-то логика тут
}

void func2 () 
{
std::string line2;
std::future<std::size_t> future_read_2 = boost::asio::async_read_until(socket, boost::asio::dynamic_buffer(line2), '\n', boost::asio::use_future);

// какая-то логика тут

const size_t bytes_transferred = future2_read.get();

// какая-то логика тут
}

void func3 () 
{
std::string line3;
std::future<std::size_t> future_read_3 = boost::asio::async_read_until(socket, boost::asio::dynamic_buffer(line3), '\n', boost::asio::use_future);

// какая-то логика тут

const size_t bytes_transferred = future3_read.get();

// какая-то логика тут
}

...


С ассиметричными безстековыми корутинами можно ожидать func1(), func2(), func3() параллельно и будить по мере загрузки I/O.
Как такое проделать с boost::asio::use_future ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.