Detener
Puede usar la función Halt para detener la ejecución actual del motor de reglas. La función Halt toma un parámetro de tipo Boolean
. Si especifica el valor del parámetro como true
, el motor de reglas también borra la agenda que contiene las reglas candidatas pendientes.
El método Policy.Execute es básicamente un contenedor alrededor del método RuleEngine.Execute . Tiene código parecido al siguiente:
RuleEngine.Assert(facts);
RuleEngine.Execute();
RuleEngine.Retract(facts);
Si usa el método Policy.Execute para ejecutar una directiva, el motor de reglas devuelve el control al método Policy.Execute cuando se ejecuta la función Halt . El método Policy.Execute retira los hechos y devuelve el control al autor de la llamada. Por tanto, la ejecución de directiva detenida no se puede reanudar en este caso. Lo mismo sucede cuando se usa la forma Reglas de llamada para invocar la directiva.
Sin embargo, si usa el método RuleEngine.Execute directamente para ejecutar la directiva, puede reanudar la ejecución de la directiva detenida con la siguiente regla pendiente activando simplemente llamando a RuleEngine.Execute de nuevo (siempre que no retire los objetos necesarios entre las dos llamadas). El código de ejemplo para reanudar la ejecución de la directiva detenida es el siguiente:
//assert facts into working memory of the rule engine instance
RuleEngine.Assert(facts);
//execute the policy
RuleEngine.Execute();
//policy invokes the Halt method when executing actions.
//control is returned to here when the Halt method is invoked
//when engine is halted do the following
//Add your code here
//To resume the halted rule engine execution
RuleEngine.Execute();
//retract or remove facts frm the working memory of the rule engine
RuleEngine.Retract(facts);
Tenga en cuenta que el método Policy.Execute almacena en caché las instancias del motor de reglas para mejorar el rendimiento. Cuando se usa el método RuleEngine.Execute directamente, las instancias del motor de reglas no se almacenan en caché.