В целом обработка отмены корутин в asyncio сделана правильно, насколько это можно себе представить. Нельзя ведь просто отменить верхнеуровневую корутину и не трогать то, что она в данный момент await-ит. И нельзя делать это в обратном порядке, т.е. убивать корутины сверху вниз.