I'll be more brazen and say I would have expected some working, production code examples by now. What I've got is someone throwing it over the wall: ok, thanks, I guess. I'd rather know than not. But the code is smelly, internally it would appear to be failing because it tried to pass a loop kwarg which another part of it doesn't recognize: I didn't pass that arg.
From what I can see so far asyncio.gather() would seem to be the canonical refactor.
I'm not sure that I'm down with the philosophy of the loop stopping running AT ALL unless I ask for it. I've got long-running processes. I spew stack traces from within coroutines, and if the situation is dire enough I call stop() myself.
I always thought that being able to leave coroutines in the queue when the loop isn't running was a feature, not a bug.