有没有一种方法可以异步运行NRule Engine?

时间:2019-08-28 06:44:09

标签: nrules

我想异步运行所有规则以使其线程安全

当我执行负载测试时,为什么RuleEngine需要那么多时间来执行所有规则。

        NRuleRepository repository = null;
        foreach (var rule in rules)
        {                
            repository = new NRuleRepository();
            repository.LoadRules(rule.Rule);
            var factory = repository.Compile();
            var session = factory.CreateSession();
            NRuleBody data = null;
            foreach (var fact in rule.RuleDataList)
            {
                data = new NRuleBody();
                data.Rule = rule.Rule;
                data.RuleData = fact;
                session.Insert(data);
            }

            result += session.Fire();
        }

我可以拨打以下电话吗?

session.FireAsync();

还是有其他选项可以触发多个规则,但是要异步执行? 和NRuleRepository类应在每个请求上重新初始化?

1 个答案:

答案 0 :(得分:1)

至少,您可能可以利用Task.Run()为存储库的每个实例创建一个线程,但是您所做的工作似乎效率很低。

为什么要在会话中插入带有数据的规则?您已经将规则添加到存储库中。

如果您在存储库中仅使用单一规则,则NRules几乎肯定是过大了,并且最好执行几乎所有其他操作。