EvaluateAsync() public method

public EvaluateAsync ( ) : Task
return Task
        private async Task<bool> ExecuteRuleAsync(ValidationRule rule, ISet<object> failedTargets, ValidationResult validationResultAccumulator, SynchronizationContext syncContext)
        {
            // Skip rule if the target is already invalid and the rule is not configured to execute anyway
            if (failedTargets.Contains(rule.Target) && !ShouldExecuteOnAlreadyInvalidTarget(rule))
            {
                // Assume that the rule is valid at this point because we are not interested in this error until
                // previous rule is fixed.
                SaveRuleValidationResultAndNotifyIfNeeded(rule, RuleResult.Valid(), syncContext);

                return true;
            }

            var ruleResult = !rule.SupportsSyncValidation
                ? await rule.EvaluateAsync().ConfigureAwait(false)
                : rule.Evaluate();

            SaveRuleValidationResultAndNotifyIfNeeded(rule, ruleResult, syncContext);

            AddErrorsFromRuleResult(validationResultAccumulator, rule, ruleResult);

            if (!ruleResult.IsValid)
            {
                failedTargets.Add(rule.Target);
            }

            return true;
        }
        private RuleResult ExecuteRuleCore(ValidationRule rule)
        {
            RuleResult result = RuleResult.Valid();

            if (!rule.SupportsSyncValidation)
            {
                var completedEvent = new ManualResetEvent(false);

                rule.EvaluateAsync().ContinueWith(t =>
                {
                    result = t.Result;
                    completedEvent.Set();
                });

                var isCompleted = completedEvent.WaitOne(AsyncRuleExecutionTimeout);

                if (!isCompleted)
                {
                    throw new TimeoutException("Rule validation did not complete in specified timeout.");
                }
            }
            else
            {
                result = rule.Evaluate();
            }

            return result;
        }
        private static Task<RuleResult> ExecuteRuleCoreAsync(ValidationRule rule)
        {
            Task<RuleResult> resultTask;

            if (!rule.SupportsSyncValidation)
            {
                resultTask = rule.EvaluateAsync();
            }
            else
            {
                var tcs = new TaskCompletionSource<RuleResult>();

                var result = rule.Evaluate();

                tcs.SetResult(result);

                resultTask = tcs.Task;
            }

            return resultTask;
        }