私が知っているように、Akka.Netのすべてのオペレーションは非同期であり、は単にStop
メッセージをアクタに送信するだけです。それは、俳優が完全にシャットダウンする前に、ある時間生きていることを意味します。アクタが完全に停止するのを待つ方法はありますか?
Context.Child()
の直後にContext.Stop()
の後に私が停止した俳優の名前を呼ぶと、私は同じ俳優を迎えます。ここ
は
var actor = context.Child(actorName);
if (actor.Equals(ActorRefs.Nobody))
{
actor = CreateNewActor();
}
Context.Stop(actor)
actor = context.Child(actorName);
// what do we get here, same actor or ActorRefs.Nobody ?
私のアプリケーションは、端末からのイベントを処理するためにアクターを作成するコード例です。新しい端末が接続されるたびに、端末名を使用してContext.Child()
と呼んで新しい俳優を作成します。ターミナルが切断されると、私は俳優を止める。
問題は、同じ端末でDisconnectの直後にConnectメッセージが表示されることがあり、その結果、俳優が停止することがあります。そのアクタが停止メッセージを受信したことを確認する方法はありますか?すぐに停止されますか?
あなたはおよそ次のようになります。DeathWatch 別名 *ライフサイクルの監視*シャットダウンを確認して:私の心に来るGracefulStop –
命題の一つでも[FSM](http://getakka.net/docs/FSM)です。アクターが切断メッセージを受信すると、新しい状態に切り替えて動作を変更します。したがって、Connectメッセージは通常の方法で処理されません。また、Connectメッセージが処理されていないときにアクターが何をすべきかを定義することもできます。 –