Время его вызова не контролируется при запуске функции, которая его принимает, это и означает, что он асинхронный. Разумеется, можно придумать какие-нибудь дурные кейсы, когда он не по назначению используется
Если использовать грин тред как тред (как того хочет Антон например), то вызов синхронный, да. Если вы в котлин пишете async{}.await() - это синхронный вызов
Как минимум, чтобы вызванная функция завершилась до того, как ей будет что вернуть/передать в калбек, ей нужно уйти на другой поток, неважно, зелёный или коричневый