Одним из основных преимуществBoost.Fiber— возможность использовать асинхронные операции для повышения эффективности, в то же время структурируя код вызова., как если быоперации были синхронными. Асинхронные операции обеспечивают уведомление о завершении различными способами, но большинство из них включают функцию обратного вызова. В этом разделе рассматривается тактика взаимодействияBoost.Fiberс произвольной асинхронной операцией.
Для иллюстрации рассмотрим следующий гипотетический API:
class AsyncAPI {
public:
AsyncAPI();
typedef int errorcode;
template< typename Fn >
void init_write( std::string const& data, Fn && callback);
template< typename Fn >
void init_read( Fn && callback);
};
В каждой из них (12) и (13).
- Метод<
AsyncAPI
>только инициирует операцию. Он возвращается немедленно, пока запрошенная операция еще не завершена. - Метод принимает обратный вызов. Когда операция завершается, вызывается обратный вызов с соответствующими параметрами (код ошибки, данные, если применимо).
Мы хотели бы обернуть эти асинхронные методы в функции, которые кажутся синхронными, блокируя вызывающее волокно до завершения операции. Это позволяет нам использовать функцию обертки’s для доставки соответствующих данных.