public Task <EvaluationResult> Evaluate(CancellationToken cancellationToken)
            {
                // wrap the AST task so that instead of returning only one boolean, it returns also the error message
                return(new Task <EvaluationResult>(() =>
                {
                    var astTask = _ast.Evaluate(cancellationToken);
                    astTask.Start();

                    return new EvaluationResult
                    {
                        RuleId = _ruleId,
                        ConcernedProperties = _concernedProperties,
                        AstResult = astTask.Result,
                        ErrorMessage = _errorMessage
                    };
                }, cancellationToken));
            }