Здравствуйте, Dair, Вы писали:
D>А в чём принципиальное отличие от async/await?
async ориентирован на работу с разными потоками, а корутины ориентированы на работу в одном потоке. При работе с async вызывающая и вызываемая функции могут выполняться асинхронно и одновременно. У корутин же в каждый момент времени активна только какая-то одна, а другая находится в "подвешенном" состоянии (suspended). Корутины можно рассматривать как новый способ ветвления программы. Ну или как на многократно вызываемую функцию, которая между вызовами "помнит" своё состояние и продолжает выполняться с того места, с которого она вернула управление при прошлом вызове.
Лично мое имхо: в С++20 использование корутин слишком громоздко и код не упрощает от слова "совсем". Как по мне, то проще наколбасить сколько нужно кастомных итераторов. По крайней мере, это будет более привычно. А вот начиная с 23-го стандарта появляется полезная штуковина:
std::generator, после чего, я ожидаю, что корутины станут более юзабельными.