I have a blocking, non-async code like this:
def f():
    def inner():
        while True:
            yield read()
    return inner()
With this code the caller can choose when to stop the function to generate data. How to change this to async? This solution doesn't work:
async def f():
    async def inner():
        while True:
            yield await coroutine_read()
    return inner()
... because  yield can't be used in async def functions. If i remove the async from the inner() signature, I can't use await anymore.
 
    