C# 如何前进到下一个状态,而不对每个接收到的消息重复相同的条件评估?

C# 如何前进到下一个状态,而不对每个接收到的消息重复相同的条件评估?,c#,akka.net,C#,Akka.net,我有一个参与者需要从各种来源收集数据,然后才能继续处理。目前,我对每个收到的消息重复相同的条件评估: private Foo foo; private Bar bar; private void DoSomething(DoSomething message) { this.BecomeWaitingForInputData(); this.GetFoo(message.FooId); /* sends message */ this.GetBar(message.B

我有一个参与者需要从各种来源收集数据,然后才能继续处理。目前,我对每个收到的消息重复相同的条件评估:

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();
}
private Foo-Foo;
私人酒吧;
私有无效DoSomething(DoSomething消息)
{
这个。正在等待输入数据();
this.GetFoo(message.FooId);/*发送消息*/
这个.GetBar(message.BarId);/*发送消息*/
}
private void正在等待输入数据()
{
这个.变成(()=>
{
this.Receive((消息)=>
{
此.CollectFoo(消息);/*分配给foo*/
this.ProcessInputDataIfReady();
});
this.Receive((消息)=>
{
此.CollectBar(消息);/*分配给bar*/
this.ProcessInputDataIfReady();
});
});
}
私有void ProcessInputDataIfReady()
{
if(this.foo==null | | this.bar==null)返回;
/* ... */
这是。正在等待ProcessResults();
}
是否有方法避免重复此.ProcessInputDataIfReady(),或者这是编写它的最佳方式?我能找到的大多数示例(例如)都是用Scala编写的,Scala似乎允许使用各种各样的语法,我在C#中看不到与之等价的东西。

您可以使用,它允许您在处理每个事件时返回下一个行为


目前编写的
ReceiveActor
不允许Scala使用的nice
类型的操作符,因此,如果您想坚持这种设计,您现在可能是以我所知的最不痛苦的方式来做的。

我简要地看了一下
FSM
类的文档,这似乎正是我所需要的。当你说“当前编写的
ReceiveActor
”时,这是否意味着正在进行一些更改?今天,我一直在将我的actor改写为
FSM
,一旦你掌握了窍门,与之合作将是一种乐趣。我特别喜欢
FsmEvent.Match()。这是我们绝对应该补充的东西。