私は、Become()メソッドによって切り替えられた、切り替え可能な振る舞いを持つReceive Actorを持っています。子アクターを監視するには、すべての状態メソッドに対してReceive < Terminated>呼び出しを追加する必要があります。例えばReceiveActorのコード複製を減らす方法
、私の代わりに、あなたのようにTerminated
の型を取るプライベートメソッドを作成することができ、あなたのアクションを実行するためにラムダを使用している
public class SomeActor : ReceiveActor
{
public SomeActor()
{
// create child actors
Become(Ready);
}
private void Ready()
{
Receive<InitMessage>(m =>
{
Become(Working1);
});
Receive<Terminated>(m =>
{
// duplicated termination stuff
Become(Terminated);
});
}
private void Working1()
{
Receive<InitMessage>(m =>
{
Become(Working2);
});
Receive<Terminated>(m =>
{
// duplicated termination stuff
Become(Terminated);
});
}
private void Working2()
{
Receive<InitParcerMessage>(m =>
{
Become(Working1);
});
Receive<Terminated>(m =>
{
// duplicated termination stuff
Become(Terminated);
});
}
private void Terminated()
{
// do some stuff
}
}
実際に達成しようとしていることを理解するのは難しいです。アクターの監視/見方では、アクターは 'Context.Watch(actorRef)'を使ってalivenessをチェックすることに関連する用語です。実際にここで何を監視したいのかを記述してください。 – Horusiath
イベントをトリガーし、すべての子をサブスクライブして、いつ終了するか、途中でTerminatedメソッドを処理するかを知らせることができます。 – Zinov
@Zinovあなたは単純なC#イベントを意味しますか? – bonzaster