我做伺服器,經常寫異步邏輯,我覺得最好的語法糖還是協程吧。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年多沒重新開機。我覺得很成熟了。