从 1.54.0 版本开始,Boost.Asio 开始支持协程。异步编程是复杂的,协程可以让我们以同步的方式编写出异步的代码,在提高代码可读性的同时又不会丢失性能。
在 Boost.Asio 要怎样才能使用协程呢?可以使用boost::asio::spawn()
开启一个协程:
spawn()
的第一个参数可以是io_service
,也可以是strand
(如果需要在多线程中保证同步,就需要使用strand
,具体可以参见 [浅谈 Boost.Asio 的多线程模型])
协程可以提供代码可读性,例如,如果没有使用协程,那么我们需要编写很多回调函数:
使用协程之后,就不需要回调函数了:
上面的代码,如果出现错误就会抛出异常。当然我们也可以使用错误码替代异常: