나는 처리를 계속하기 전에 다양한 소스에서 데이터를 수집해야하는 액터가 있습니다. 현재, 나는 각각의 수신 된 메시지에 대해 동일한 조건 평가를 반복 :수신 된 각 메시지에 대해 동일한 조건 평가를 반복하지 않고 어떻게 다음 상태로 진행합니까?
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)는 스칼라로 작성되었습니다.이 스칼라는 모든 종류의 구문을 허용하는 것으로 보이며 C#에서는 이와 비슷한 것을 볼 수 없습니다.
나는'FSM' 클래스의 문서를 간략히 들었고, 필자가 필요로하는 것 같다. "ReceiveActor가 현재 쓰여진 그대로"라고 말하면 파이프 라인에 일부 변경 사항이 있다는 뜻입니까? – Stijn
저는 오늘 배우를'FSM'으로 다시 쓰고 있습니다. 일단 배우가 나오면 함께 일하게되어 기쁩니다. 필자가 소스 코드에서 발견 한'FsmEvent.Match(). <>()'문법을 특히 좋아합니다. 현재 어디서나 문서화되지 않은 것 같습니다. – Stijn
@Stijn 아니요, 우리는 현재 그 문서를 가지고 있지 않습니다. 우리가 분명히 추가해야 할 것입니다. – Aaronontheweb