docs: async def with_call(self,
                    request_iterator,
                    timeout=None,
                    metadata=None,
                    credentials=None):
          """Synchronously invokes the underlying RPC on the client.
  
      Args:
        request_iterator: An ASYNC iterator that yields request values for the RPC.
        timeout: An optional duration of time in seconds to allow for the RPC.
                 If None, the timeout is considered infinite.
        metadata: Optional :term:`metadata` to be transmitted to the
          service-side of the RPC.
        credentials: An optional CallCredentials for the RPC.
  
      Returns:
        The response value for the RPC and a Call object for the RPC.
  
      Raises:
        RpcError: Indicating that the RPC terminated with non-OK status. The
          raised RpcError will also be a Call for the RPC affording the RPC's
          metadata, status code, and details.
      """
          fut = self.future(request_iterator, timeout, metadata, credentials)
          try:
              result = await fut
              return (result, fut)
          finally:
              if not fut.done():
                  fut.cancel()