2016-10-27 1 views
1

Ich frage mich, ob ich einen Schauspieler stoppen kann, ohne auf die aktuelle Nachricht zu warten, oder einfach abzubrechen.Akka.net Wie kann ich einen Schauspieler stoppen, ohne auf die Beendigung der aktuellen Nachricht zu warten?

erklärt hier die Möglichkeiten, es zu

https://petabridge.com/blog/how-to-stop-an-actor-akkadotnet/

tun Aber sie alle warten, bis die aktuelle Nachricht verarbeitet werden.

Stop() der Schauspieler:

stoppt den Schauspieler unmittelbar nach dem die aktuelle Nachricht Verarbeitung beendet.

Tötet den Schauspieler:

dies eine ActorKilledException wirft, die protokolliert werden und behandelt werden. Der Schauspieler wird sofort stoppen, nachdem es die aktuelle Nachricht verarbeitet.

dem Schauspieler eine PoisonPill senden:

der Schauspieler wird die Nachrichten derzeit in der Mailbox beenden Verarbeitung, und dann stoppen.

Antwort

3

Ich würde fragen, warum Sie einen langen laufenden Prozess innerhalb der Akteure Nachricht erhalten haben. Es wäre besser, einen Code zu platzieren, der einige Zeit in Anspruch nehmen kann und in der Lage sein soll, innerhalb des Empfangs der Nachricht eine Aufgabe abzubrechen.

Der Akteur würde dann freigegeben werden und in der Lage sein, die Nachricht von einer der Stoppmethoden, die Sie oben aufgelistet haben, zu akzeptieren und die Aufgabe entsprechend zu beenden.

Zusätzlich Nummer 4 auf der folgenden Seite zeigt einige Beispiel-Code https://petabridge.com/blog/top-7-akkadotnet-stumbling-blocks/

+0

Das ist eine schöne Spitze, ich es nicht auf eine Aufgabe der Einkapselung gedacht haben, aber funktioniert gut mit einem CancellationToken :) Vielen Dank! –

Verwandte Themen