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()。这是我们绝对应该补充的东西。