Как показывает практика, применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным.
Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход, основанный на прозрачном использованием сопрограмм.
Он значительно сокращает объём и сложность кода, превращая его в понятный, легко читаемый и структурируемый код.