Я нахожу код написания, который в основном выглядит следующим образом:
using boost::system::error_code;
socket.async_connect(endpoint, [&](error_code Error)
{
if (Error)
{
print_error(Error);
return;
}
// Read header
socket.async_read(socket, somebuffer, [&](error_code Error, std::size_t N)
{
if (Error)
{
print_error(Error);
return;
}
// Read actual data
socket.async_read(socket, somebuffer, [&](error_code Error, std::size_t N)
{
// Same here...
});
});
};
Итак, в основном я встраиваю обратные вызовы в обратные вызовы в обратных вызовах, в то время как логика проста и "линейна".
Есть ли более элегантный способ написать это, чтобы код был локальным и упорядоченным?