c++ coroutines
https://cpprefjp.github.io/lang/cpp20/coroutines.html
いろんなケースに対応できるよう、複雑な仕様になっている(他言語比)
async
のようなキーワードはなく、co_awaitなどを使った関数が自動でコルーチンとみなされる
co_yield x;
xを値としてコルーチンを中断し、呼び出し元に処理を返す
co_await expr;
exprの評価が実行されているあいだ、処理を中断する
co_return x;
xを値としてコルーチンを終了する