I'm on my second pass through the book and just got reminded how good it actually is. It starts easy and lays out the basics first but quickly picks up the pace without beating around any bush. I'm keeping this as reference material until the API changes because—
1. The core material of the book is short, only 90 pages.
2. It Does a great job in differentiating and explaining the functions of the two major types of asyncio APIs—APIs targeted towards developers writing services and APIs targeted towards framework writers.
3. Talks about the difference between asyncio.create_task and low-level asyncio.ensure_future. The behavior of the latter seems to be a source of major confusion among developers trying out asyncio for the first time.
4. Talks about how to handle SIGINT and SIGTERM properly, it's inherently difficult to gracefully handle interrupt and terminate signals in concurrent I/O programming.
5. Before Python 3.9, asyncio.run didn't wait for futures created by loop.run_in_executor(). So the book presents a good workaround.