public function call($procedure, $varArgs = null /*..., $argN*/) {
        if (!is_string($procedure)) {
            throw new \InvalidArgumentException(
                sprintf('%s requires a string at Argument 1', __METHOD__)
            );
        }

        if (!$this->isStarted) {
            $this->start();
        }

        if ($this->maxTaskQueueSize < 0 || $this->maxTaskQueueSize > $this->outstandingTaskCount) {
            $task = $this->taskReflection->newInstanceArgs(func_get_args());
            return $this->acceptNewTask($task);
        } else {
            return new Failure(new TooBusyException(
                sprintf("Cannot execute '%s' task; too busy", $procedure)
            ));
        }
    }