As someone who has fought these battles before this is a great article that wound up almost exactly where I did. Honestly glad to have some validation that there really wasn't an easier way.
The asyncio models changes so fast that a lot of older examples and documentation is no longer the blessed way to do things.