better async with generator