experimental implementation based on asyncio