Based on guidance from [Python concurrency with Asyncio](https://www.manning.com/books/python-concurrency-with-asyncio) by Matthew Fowler, this release simplifies the asyncio code, and fixes some warning:
- It makes sure coroutines that were not properly awaited are now awaited.
- It uses `asyncio.create_task()` and `asyncio.run()` instead of manually creating and keeping track of the event loop.