Блин. Ну с такой логикой и в Питоне всё нормально с раскраской функций: «Want to call an async function blockingly from a sync function? -> Throw it on an executor!
Want to call a sync function from an async function? -> Either just call in normally, or if it would block your async function spawn it as a blocking task!»
И все остальные пункты тоже. Я до сих пор не понимаю, почему Питон (как и Раст) до сих пор не дал нам такого сахара, чтобы асинхронные функции сами себя вызывали асинхронно, и наоборот, при использовании await синхронная функция сама бы кидалась в тредпул-экзекьютор