boost asio async_read如何设置超时返回呢

boost asio async_read怎么设置超时返回呢?
不知道有没熟悉boost asio的,用async_read投递一个读请求,这个函数是要等读到指定长度的数据或者出错才返回,有没有办法设置一个参数让它超时返回?因为最近遇到一个网络环境很奇葩,好像async_read之后偶尔会一直不返回,很多其它用户都不会出现过

------解决方案--------------------
要么就只能自己设置超时判断
------解决方案--------------------
回调函数好像必须调用,出错了也得调用,除非你stop io_service。
如果要提供这个功能,必须从io_service上下手,即提供一个取消异步调用的接口,这个接口并没有,而且就算提供了,怎么知道要取消哪一个异步调用呢?因为异步调用并没有返回一个id。
实现还有一个难点,对于已经完成但还没有调用回调函数的异步调用,不好取消。至少asio未实现这样的功能,看看它的timer就知道了,timer虽然可以取消,但不保证取消之后,回调函数一定不回调。
------解决方案--------------------
只要找不到timed_async_read之类的函数,应该就不行了。