Это слишком сложно.

аюсь обернуть голову вокруг асинхронного / ожидания в Python.

Я на правильном пути?

async а также@coroutine функции возвращают сопрограмму / генератор, а не возвращаемое значение.

await извлекает фактическое возвращаемое значение сопрограммы / генератора.
 

async Результат функции (сопрограммы) предназначен для добавления в цикл обработки событий.

await создает «мост» между циклом обработки событий и ожидаемой сопрограммой (включение следующей точки).

@coroutine«syield напрямую связывается с обработкой событий (пропуск прямого звонка, который ждет результата)
 

await может использоваться только внутри асинхронных функций.

yield можно использовать только внутри@coroutine.

(@coroutine = @types.coroutine)

Ответы на вопрос(2)

Ваш ответ на вопрос