Freigeben über


Anhalten

Sie können die Anhalten-Funktion verwenden, um die Ausführung des aktuellen Regelmoduls anzuhalten. Die Halt-Funktion verwendet einen Parameter vom Typ Boolean. Wenn Sie den Wert für den Parameter als trueangeben, löscht das Regelmodul auch die Agenda, die die ausstehenden Kandidatenregeln enthält.

Die Policy.Execute-Methode ist im Grunde ein Wrapper um die RuleEngine.Execute-Methode . Es weist Code auf, der dem folgenden Code ähnelt:

RuleEngine.Assert(facts);   
RuleEngine.Execute();   
RuleEngine.Retract(facts);  

Wenn Sie die Policy.Execute-Methode zum Ausführen einer Richtlinie verwenden, gibt das Regelmodul die Steuerung an die Policy.Execute-Methode zurück, wenn die Funktion Anhalten ausgeführt wird. Die Policy.Execute-Methode zieht die Fakten zurück und gibt die Steuerung an den Aufrufer zurück. Daher kann die Ausführung der angehaltenen Richtlinie in diesem Fall nicht fortgesetzt werden. Dasselbe geschieht, wenn Sie die Anrufregeln-Form verwenden, um die Richtlinie aufzurufen.

Wenn Sie jedoch die RuleEngine.Execute-Methode direkt zum Ausführen der Richtlinie verwenden, können Sie die Ausführung der angehaltenen Richtlinie fortsetzen, indem Sie einfach ruleEngine.Execute erneut aufrufen (vorausgesetzt, Sie haben keine Objekte zurückgezogen, die zwischen den beiden Aufrufen erforderlich sind). Der Beispielcode zum Fortsetzen der Ausführung der angehaltenen Richtlinie lautet wie folgt:

//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);  

Beachten Sie, dass die Policy.Execute-Methode die Instanzen des Regelmoduls zwischenspeichert, um eine bessere Leistung zu erzielen. Wenn Sie die RuleEngine.Execute-Methode direkt verwenden, werden die Instanzen des Regelmoduls nicht zwischengespeichert.

Siehe auch

Motorsteuerungsfunktionen