Skip to content

Asynchronous Rules

Arif Yayalar (@ayayalar) edited this page Dec 30, 2019 · 2 revisions

Asynchronous rules executed serially in that same order provided to the rule engine unless the ExecutionOrder property is specified.

Example
class QualifiesForFreeShippingAsync: RuleAsync<Order>
{   
    public async override Task<IRuleResult> InvokeAsync()
    {
        // Order instance accessible through the Model property.
        if (Model.Amount > 50.0m) Model.FreeShipping = true;
        
        return await RuleResult.Nil();
    }
}

Invoke Asynchronous/Parallel Rule(s)

var ruleResults = await RuleEngine<Order>.GetInstance(order)
    .ApplyRules(new QualifiesForFreeShippingAsync())
    .ExecuteAsync()

Returning result from a rule is optional. Use it if additional output (e.g. error message, code, etc.) needed. In most cases the Model should be the input and the output of the rule engine.