code: async def run_asgi(self):
          
          try:
              result = await self.app(self.scope, self.asgi_receive, self.asgi_send)
          except BaseException as exc:
              self.closed_event.set()
              msg = "Exception in ASGI application\n"
              self.logger.error(msg, exc_info=exc)
              if not self.handshake_started_event.is_set():
                  self.send_500_response()
              else:
                  await self.handshake_completed_event.wait()
              self.transport.close()
          else:
              self.closed_event.set()
              if not self.handshake_started_event.is_set():
                  msg = "ASGI callable returned without sending handshake."
                  self.logger.error(msg)
                  self.send_500_response()
                  self.transport.close()
              elif result is not None:
                  msg = "ASGI callable should return None, but returned '%s'."
                  self.logger.error(msg, result)
                  await self.handshake_completed_event.wait()
                  self.transport.close()
docs: Wrapper around the ASGI callable, handling exceptions and unexpected
          termination states.