Interrompre
Vous pouvez utiliser la fonction Halt pour arrêter l’exécution actuelle du moteur de règles. La fonction Halt prend un paramètre de type Boolean
. Si vous spécifiez la valeur pour le paramètre , true
le moteur de règles efface également l’agenda qui contient les règles candidates en attente.
La méthode Policy.Execute est essentiellement un wrapper autour de la méthode RuleEngine.Execute . Son code est similaire au code suivant :
RuleEngine.Assert(facts);
RuleEngine.Execute();
RuleEngine.Retract(facts);
Si vous utilisez la méthode Policy.Execute pour exécuter une stratégie, le moteur de règles retourne le contrôle à la méthode Policy.Execute lors de l’exécution de la fonction Halt . La méthode Policy.Execute retire les faits et retourne le contrôle à l’appelant. Dans ce cas, l'exécution interrompue de la stratégie ne peut être reprise. La même chose se produit lorsque vous utilisez la forme Règles d’appel pour appeler la stratégie.
Toutefois, si vous utilisez la méthode RuleEngine.Execute directement pour exécuter la stratégie, vous pouvez reprendre l’exécution de la stratégie arrêtée avec le déclenchement de la règle en attente suivante en appelant simplement RuleEngine.Execute à nouveau (à condition de ne pas retirer d’objets nécessaires entre les deux appels). Voici l'exemple de code permettant de reprendre l'exécution interrompue de la stratégie :
//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);
Notez que la méthode Policy.Execute met en cache les instances du moteur de règles pour de meilleures performances. Lorsque vous utilisez directement la méthode RuleEngine.Execute , les instances du moteur de règles ne sont pas mises en cache.