What's the difference between loop.create_task, asyncio.async/ensure_future and Task? What's the difference between loop.create_task, asyncio.async/ensure_future and Task? python-3.x python-3.x

What's the difference between loop.create_task, asyncio.async/ensure_future and Task?


As you've noticed, they all do the same thing.

asyncio.async had to be replaced with asyncio.ensure_future because in Python >= 3.5, async has been made a keyword[1].

create_task's raison d'etre[2]:

Third-party event loops can use their own subclass of Task for interoperability. In this case, the result type is a subclass of Task.

And this also means you should not create a Task directly, because different event loops might have different ways of creating a "Task".

Edit

Another important difference is that in addition to accepting coroutines, ensure_future also accepts any awaitable object; create_task on the other hand just accepts coroutines.