private function walk(string $method, int $highProbability = null, array $args = [])
    {
        $result = false;
        foreach ($this->handlers as $data) {
            list($handler, $chainProbability) = $data;
            $probability = isset($highProbability) ?
                $highProbability :
                $chainProbability;
            $result = call_user_func_array([$handler, $method], $args);
            if ($result and mt_rand(0, 100) > $probability) {
                return $result;
            }
        }
        return $result;
    }