code: async def run_async(self):
          
          log.info("%r: Starting %r clients", self.container_id, len(self.clients))
          tasks = [self._start_client_async(c) for c in self.clients]
          try:
              await asyncio.gather(*tasks)
              redirects = [c.redirected for c in self.clients if c.redirected]
              failed = [c.error for c in self.clients if c.error]
              if failed and len(failed) == len(self.clients):
                  log.warning("%r: All clients failed to start.", self.container_id)
                  raise failed[0]
              if failed:
                  log.warning("%r: %r clients failed to start.", self.container_id, len(failed))
              elif redirects:
                  await self._handle_redirect(redirects)
          except EventHubError:
              await self.stop_async()
              raise
          except Exception as exp:
              await self.stop_async()
              raise EventHubError(str(exp))
          return failed
docs: Run the EventHubClient asynchronously.
          Opens the connection and starts running all AsyncSender/AsyncReceiver clients.
          Returns a list of the start up results. For a succcesful client start the
          result will be `None`, otherwise the exception raised.
          If all clients failed to start, then run will fail, shut down the connection
          and raise an exception.
          If at least one client starts up successfully the run command will succeed.
  
          :rtype: list[~azure.eventhub.common.EventHubError]