0
私は、処理を続ける前に、さまざまなソースからデータを収集する必要があるアクターを持っています。現在、私は、各受信したメッセージに同じ条件評価を繰り返します受信したメッセージごとに同じ条件評価を繰り返さずに、次の状態に進めるにはどうすればよいですか?
private Foo foo;
private Bar bar;
private void DoSomething(DoSomething message)
{
this.BecomeWaitingForInputData();
this.GetFoo(message.FooId); /* sends message */
this.GetBar(message.BarId); /* sends message */
}
private void BecomeWaitingForInputData()
{
this.Become(() =>
{
this.Receive<Foo>((message) =>
{
this.CollectFoo(message); /* assigns to foo */
this.ProcessInputDataIfReady();
});
this.Receive<Bar>((message) =>
{
this.CollectBar(message); /* assigns to bar */
this.ProcessInputDataIfReady();
});
});
}
private void ProcessInputDataIfReady()
{
if (this.foo == null || this.bar == null) return;
/* ... */
this.BecomeWaitingForProcessResults();
}
this.ProcessInputDataIfReady();
を繰り返さないようにする方法はありますか、これはそれを書くための最善の方法は何ですか?私が見つけたほとんどの例(例:this one)は、Scalaで書かれています。これは、あらゆる種類の派手な文章を構文で許可するようですが、C#ではこれと同等のものは実際には見えません。
私は 'FSM'クラスのドキュメントを簡単に見ました。これは私が必要としているものと思われます。 「ReceiveActorは現在書かれているように」と言うと、パイプラインにいくつかの変更があることを意味しますか? – Stijn
私は今日、私の俳優を「FSM」として書き直してきました。そして、あなたがそれをやり遂げたら、一緒に仕事をするのは楽しいことです。私はソースコードで見つかった 'FsmEvent.Match()。<>()'構文が特に好きですが、現時点でどこにも書かれていないようですね。 – Stijn
@Stijnいいえ、現時点ではドキュメントはありません。間違いなく追加する必要があります。 – Aaronontheweb