As of [bpo-32528](https://bugs.python.org/issue32528), asyncio.CancelledError is
not a subclass of concurrent.futures.CancelledError. This means that if an
asyncio future raises an exception, it won't be caught. Therefore, the
exception will bubble past the try-except within the loop in application_checker,
resulting in done applications not being cleaned up, and the application_checker
task not being queued again.
As per https://github.com/django/asgiref/pull/92
Required valid URI path fragments to be used in tests:
- Test case must ensure paths are correctly quoted before calling
run_daphne_request() & co.
Co-authored-by: Carlton Gibson <carlton.gibson@noumenal.es>