Hello,
In recursive_resolver.py there is a try block that we suspect could be preventing some cancelled programs from actually exiting:

If a asyncio.CancelledError is thrown on line 145, it would be supressed by the except clause. Isn't this an issue? Or is it intentional?
In case it's an issue, a possible solution would be to add the following two lines above the except in line 147:
except asyncio.CancelledError:
raise
Thanks.