public function readAll()
    {
        $tries = 0;
        $argumentFunction = $this->argumentFunction;
        $retryFunction = $this->retryFunction;
        do {
            $ex = null;
            $stream = $this->createExponentialBackoff()->execute($this->apiFunction, $argumentFunction());
            try {
                foreach ($stream->readAll() as $item) {
                    yield $item;
                }
            } catch (\Exception $ex) {
            }
            $tries++;
        } while ((!$this->retryFunction || $retryFunction($ex)) && $tries <= $this->retries);
        if ($ex !== null) {
            throw $ex;
        }
    }