我做服务器,经常写异步逻辑,我觉得最好的语法糖还是协程吧。asio的对于使用协程的姿势已经很舒服了:
auto [read_result, read_timeout] = co_await (
from.async_read_some(buffer(data), use_nothrow_awaitable) ||
timeout(5s) // 其实这也是一个协程
);
if (read_timeout)
co_return; // timed out
auto [e1, n1] = *read_result;
if (e1)
break;
auto [write_result, write_timeout] = co_await (
async_write(to, buffer(data, n1), use_nothrow_awaitable) ||
timeout(1s)
);
if (write_timeout)
co_return; // timed out
...
我下半年应该就会在项目组中升级最新的gcc,主要是为了使用协程的功能。我自己已经学习试用好几年了,用协程写的某个server已经跑了2年多没重启。我觉得很成熟了。