That's an interesting contrast to Python where the need to use "value = await fn()" v.s. "value = fn()" depending on whether or not that function is awaitable causes all kinds of API design complexity, all the way up to the existence of tools like https://github.com/python-trio/unasync which can code-generate the non-async version of a library from the async version.
result = fn()
result = await result
I didn't realize it had a significant performance overhead though, I should look into that.
Sounds like an excellent way to create weird concurrency heisenbugs.